Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Obcięcie znaków z końca
mefjiu
post
Post #1





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

Ostrzeżenie: (0%)
-----


Witam wyleciało mi z głowy jak nazywa się funkcja do wycinania znaków z końca gdy napotka znak podany w funkcji.

Chcę osiągnąć.

link
index.php?kategoria=true&site_no=2
lub
index.php?kategoria=true&site_no=99

sprowadzić do postaci
index.php?kategoria=true&site_no

Za wszelką pomoc z góry dzięki.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




w takim razie potrzebne Ci będzie explode bo znaki na końcu mogą być różniej długości.
Go to the top of the page
+Quote Post
mefjiu
post
Post #3





Grupa: Zarejestrowani
Postów: 313
Pomógł: 5
Dołączył: 22.03.2005

Ostrzeżenie: (0%)
-----


Jeżeli ktoś zna prostrze rozwiązanie od tego:
  1. <?php
  2. echo substr($adres,0,strRpos($adres, "="));
  3. ?>

to prosze pisać
Go to the top of the page
+Quote Post
pyro
post
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $replaced = preg_replace('|=[0-9]+|', '', $adres );
  3. ?>
Go to the top of the page
+Quote Post
bregovic
post
Post #5





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


Pyro, nie chcę podważać, ale czy on na prawdę potrzebuje zaprzęgać do pracy wujka regexa w tym dość prostym przypadku? IMO jego rozwiązanie jest prostsze.
Go to the top of the page
+Quote Post
pyro
post
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(bregovic @ 4.11.2008, 16:49:35 ) *
Pyro, nie chcę podważać, ale czy on na prawdę potrzebuje zaprzęgać do pracy wujka regexa w tym dość prostym przypadku? IMO jego rozwiązanie jest prostsze.


A czy ten regex jest skomplikowanym przypadkiem?
Go to the top of the page
+Quote Post
michalg
post
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 4.11.2008, 12:06:48 ) *
  1. <?php
  2. $replaced = preg_replace('|=[0-9]+|', '', $adres );
  3. ?>


Ale to wytnie wszystkie wystąpienia, nie tylko ostatnie. Powinno być (dolar na końcu):

  1. <?php
  2. $replaced = preg_replace('|=[0-9]+$|', '', $adres );
  3. ?>
Go to the top of the page
+Quote Post
JoShiMa
post
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


i nie + (maksymalistyczny)
tylko +? (minimalistyczny)
Go to the top of the page
+Quote Post
michalg
post
Post #9





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(JoShiMa @ 4.11.2008, 17:25:08 ) *
i nie + (maksymalistyczny)
tylko +? (minimalistyczny)


Dlaczego?
Go to the top of the page
+Quote Post
pyro
post
Post #10





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(michalg @ 4.11.2008, 17:20:37 ) *
Ale to wytnie wszystkie wystąpienia, nie tylko ostatnie. Powinno być (dolar na końcu):

  1. <?php
  2. $replaced = preg_replace('|=[0-9]+$|', '', $adres );
  3. ?>

Och, zdawało mi się że go dałem na końcu, jednak autor podał konkretną sytuację w ktorej i tak nie mialoby to wiekszego znaczenia

Cytat(JoShiMa @ 4.11.2008, 17:25:08 ) *
i nie + (maksymalistyczny)
tylko +? (minimalistyczny)


(zgodnie z poprzednikiem) Niby dlaczego?

Ten post edytował pyro 4.11.2008, 17:30:22
Go to the top of the page
+Quote Post
JoShiMa
post
Post #11





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(michalg @ 4.11.2008, 19:26:36 ) *
Dlaczego?


Dla porządku, choć w zasadzie przy założeniu że wycinamy tylko [0-9] nie ma to znaczenia. Gdybyś jednak chciał wyciąć wszystkie znaki znajdujące się za ostatnim znakiem równości i nie dał byś ograniczenia że to będą tylko cyfry to różnica między + a +? jest kolosalna, bo ten pierwszy wytnie wtedy wszystko co znajduje się między pierwszym znakiem równości a końcem linii a ten drugi wytnie wszystko co znajduje się między ostatnim znakiem równości a końcem linii. Taka jest różnica między maksymalistycznym a minimalistycznym kwantyfikatorem i lepiej od razu się do tego przyzwyczajać i nabierać dobrych nawyków.

Ten post edytował JoShiMa 4.11.2008, 17:34:06
Go to the top of the page
+Quote Post
bregovic
post
Post #12





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


Pyro, nie chodzi mi o flame'a, ani o twojego regexa (który jest zrozumiały i w porządku) chodzi mi o fakt zaprzęgania silnika wyrażeń regularnych do bardzo prostej operacji na nieskomplikowanym stringu. IMO jeśli możesz coś zrobić funkcjami str* bez stawania na głowie powinieneś to zrobić funkcjami str*. Ale whatever floats your boat.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #13





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(bregovic @ 4.11.2008, 19:33:43 ) *
[IMO jeśli możesz coś zrobić funkcjami str* bez stawania na głowie powinieneś to zrobić funkcjami str*.


Jakoś tak się ciągle słyszy, że preg_i są szybsze.

Ale tam zaraz flame. Merytoryczna dyskusja się rozwinęła. Niech się przedszkolaki uczą (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował JoShiMa 4.11.2008, 17:36:03
Go to the top of the page
+Quote Post
pyro
post
Post #14





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(bregovic @ 4.11.2008, 17:33:43 ) *
Pyro, nie chodzi mi o flame'a, ani o twojego regexa (który jest zrozumiały i w porządku) chodzi mi o fakt zaprzęgania silnika wyrażeń regularnych do bardzo prostej operacji na nieskomplikowanym stringu. IMO jeśli możesz coś zrobić funkcjami str* bez stawania na głowie powinieneś to zrobić funkcjami str*. Ale whatever floats your boat.


bregovic, chciałem jeszcze dodać, że autor powiedział, że szuka innego rozwiązania poza tym, które podał. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

[offtopic]
Joshima, n/c, jak juz mnie nazywasz przedszkolakiem, to chociaz przedszkolakiem chodzącym do zerówki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
[/offtopic]

Ten post edytował pyro 4.11.2008, 17:39:09
Go to the top of the page
+Quote Post
bregovic
post
Post #15





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


Fakt, I seize my case - czepialski jestem z poranka (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
michalg
post
Post #16





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(JoShiMa @ 4.11.2008, 17:33:24 ) *
Dla porządku, choć w zasadzie przy założeniu że wycinamy tylko [0-9] nie ma to znaczenia. Gdybyś jednak chciał wyciąć wszystkie znaki znajdujące się za ostatnim znakiem równości i nie dał byś ograniczenia że to będą tylko cyfry to różnica między + a +? jest kolosalna, bo ten pierwszy wytnie wtedy wszystko co znajduje się między pierwszym znakiem równości a końcem linii a ten drugi wytnie wszystko co znajduje się między ostatnim znakiem równości a końcem linii. Taka jest różnica między maksymalistycznym a minimalistycznym kwantyfikatorem i lepiej od razu się do tego przyzwyczajać i nabierać dobrych nawyków.


O tym wiem, tylko wydawało mi się, że w tym przypadku to nieistotne. Ale nie wiedziałem, że da się to tak zrobić - za pomocą operatora +? - myślałem, że steruje się tym tylko za pomocą modyfikatorów wzorców (U (PCRE_UNGREEDY)). Ale teraz widzę, że to po prostu zamienia maksymalistyczny na minimalistyczny i odwrotnie.

Ale faktycznie regexp do czegoś takiego jest chyba być trochę przesadzony i rozwiązanie z substr i strrpos jest najlepsze.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #17





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 4.11.2008, 19:36:32 ) *
[offtopic]
Joshima, n/c, jak juz mnie nazywasz przedszkolakiem, to chociaz przedszkolakiem chodzącym do zerówki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
[/offtopic]


[offtopic]
Przecież nie Ciebie tylko ewentualnie autora wątku i innych szukających tu wiedzy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
[/offtopic]

Ten post edytował JoShiMa 4.11.2008, 17:41:36
Go to the top of the page
+Quote Post
michalg
post
Post #18





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(JoShiMa @ 4.11.2008, 17:35:25 ) *
Jakoś tak się ciągle słyszy, że preg_i są szybsze.


Szybsze of ereg_, ale czy szybsze od str* ?
Go to the top of the page
+Quote Post
pyro
post
Post #19





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(michalg @ 4.11.2008, 17:44:34 ) *
Szybsze of ereg_, ale czy szybsze od str* ?


a jak ty tu chcesz uzyc str* ?
Go to the top of the page
+Quote Post
bregovic
post
Post #20





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


JoShiMa, co prawda to off-top, ale w moim doświadczeniu, dla prostych operacji na stringach funkcje str* są szybsze. Z odrobiną wyrafinowania, i dużą ilością manual-foo można z nimi zajść bardzo daleko. Poza tym:
Cytat(http://en.wikiquote.org/wiki/Jamie_Zawinski)
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował bregovic 4.11.2008, 18:05:46
Go to the top of the page
+Quote Post
michalg
post
Post #21





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 4.11.2008, 18:04:04 ) *
a jak ty tu chcesz uzyc str* ?


Chodziło mi ogólnie o funkcje stringowe, czyli w tym przypadku kombinacja strrpos i substring.
Go to the top of the page
+Quote Post
pyro
post
Post #22





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(bregovic @ 4.11.2008, 18:05:00 ) *
JoShiMa, co prawda to off-top, ale w moim doświadczeniu, dla prostych operacji na stringach funkcje str* są szybsze. Z odrobiną wyrafinowania, i dużą ilością manual-foo można z nimi zajść bardzo daleko. Poza tym:

(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)



DOBRA, WSZYSTKO LADNIE I PIEKNIE I ZEBY POPRZEDZIC NASTEPNE WYPOWIEDZI, PODALEM PRZYKLAD Z PREGIEM, PONIEWAZ AUTOR POWIDZIAL ZE SZUKA INNEGO ROZWIAZANIA POZA STRPOS I SUBSTR, GDYBY TEGO NIE ZROBIL, TO BYM PODAL WLASNIE TAKI PRZYKLAD Z STRPOSEM I SUBSTR, WIEC NIE MOWCIE JUZ ZE KLAPA Z WYRAZENIAMI

AMEN

(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

na koniec jakby ktoś chciał se sprawdzic co jest najszybsze:

  1. <?php
  2.  
  3. $tekst = 'costam=123';
  4.  
  5. list($time_s1) = explode(' ', microtime());
  6. $a = preg_replace('|=[0-9]+|', '', $tekst);
  7. echo $a.'<br />';
  8. list($time_e1) = explode(' ', microtime());
  9. echo '<br />'; echo $time_f1 = ($time_e1 - $time_s1); echo '<br />';
  10.  
  11. list($time_s2) = explode(' ', microtime());
  12. $b = ereg_replace('=[0-9]+', '', $tekst);
  13. echo $b.'<br />';
  14. list($time_e2) = explode(' ', microtime());
  15. echo '<br />'; echo $time_f2 = ($time_e2 - $time_s2); echo '<br />';
  16.  
  17. list($time_s3) = explode(' ', microtime());
  18. $c = substr($tekst,0,strRpos($tekst, "="));
  19. echo $c.'<br />';
  20. list($time_e3) = explode(' ', microtime());
  21. echo '<br />'; echo $time_f3 = ($time_e3 - $time_s3); echo '<br />';
  22.  
  23. $times = array();
  24. $times['preg*'] = $time_f1;
  25. $times['ereg*'] = $time_f2;
  26. $times['"stringowe"'] = $time_f3;
  27.  
  28. asort($times);
  29. echo '<br /> Kolejność od najszybszego do najwolniejszego:<br />';
  30. foreach($times as $key => $value)
  31. {
  32. echo $key.'<br />';
  33. }
  34.  
  35. ?>


lol, okazuje sie ze ereg jest szybsze od preg... &*T^&?
Go to the top of the page
+Quote Post
michalg
post
Post #23





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 4.11.2008, 18:31:08 ) *
na koniec jakby ktoś chciał se sprawdzic co jest najszybsze:


Dobrze by każdy test było powtórzyć parę(naście, dziesiąt) tysięcy razy.
Go to the top of the page
+Quote Post
bregovic
post
Post #24





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


[super-ot]
Nie chcę dolewać oliwy do ognia pyro, ale twój test jest nie do końca reprezentatywny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
[/super-ot]
Go to the top of the page
+Quote Post
pyro
post
Post #25





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(michalg @ 4.11.2008, 18:33:56 ) *
Dobrze by każdy test było powtórzyć parę(naście, dziesiąt) tysięcy razy.


ja go powtorzylem kilkanascie razy i za kazdym razem bylo:

string
ereg
preg

co mnie zdziwilo troche
Go to the top of the page
+Quote Post
phpion
post
Post #26





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(pyro @ 4.11.2008, 20:31:08 ) *
lol, okazuje sie ze ereg jest szybsze od preg... &*T^&?

Lol, takie testy to tylko o kant pośladków rozbić!
Za http://pl.php.net/manual/pl/function.ereg.php:
Cytat
Informacja: preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg().
Go to the top of the page
+Quote Post
pyro
post
Post #27





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(bregovic @ 4.11.2008, 18:34:57 ) *
[super-ot]
Nie chcę dolewać oliwy do ognia pyro, ale twój test jest nie do końca reprezentatywny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
[/super-ot]



Rozwiń konkluzję to poprawię, pisałem go na szybko, więc nawet nie wiem czy zrobilem jakies bledy, ale go uruchomilem iles tam razy u siebie i dziala...
Go to the top of the page
+Quote Post
bregovic
post
Post #28





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

Ostrzeżenie: (0%)
-----


Ugh, szybka dyskusja. Inni już napisali jak to testować. Najlepiej w pętli, parędziesiąt tysięcy raz, no i najlepiej na własnej maszynie, która nie robi niczego innego (ale to już trochę analna bajka).
BTW, nie używajcie ereg'ów - w PHP6 zostaną wykopane.

Ten post edytował bregovic 4.11.2008, 18:39:14
Go to the top of the page
+Quote Post
pyro
post
Post #29





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(phpion @ 4.11.2008, 18:35:08 ) *
Lol, takie testy to tylko o kant pośladków rozbić!
Za http://pl.php.net/manual/pl/function.ereg.php:


(Gulp!), boję się, że ktoś mnie zaraz zbeszta za to co gadam, ale jeśli tak, to proszę tylko nie w twarz.

Błędów nie spostrzeglem w swoim mini teściku, a wykazuje on ze ereg jest szybszy, co wedlug mnie tez nie jest poprawne, dlatego sie zdziwilem dlaczego tak pokazuje (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
michalg
post
Post #30





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Nie chodzi o odpalenie testu kilka razy i sprawdzenie, czy za każdym razem rezultat jest ten sam, tylko o wykonanie każdego polecenia w pętli kilkadziesiąt tysięcy razy i zmierzenie czasu wykonywania całej pętli.

Ale to i tak zawsze będzie test syntetyczny, który nie da miarodajnych wyników. Choćby dlatego, że w zastosowaniach rzeczywistych mogą być inne stringi do przetworzenia i być może okaże się, że dla dłuższych lepszy jest preg, a dla krótszych ereg itp.

Inna sprawa, że czasem nie warto kierować się milisekundową różnicą.

[offtopic]

Ale czasem dobrze robić takie testy, bo są przypadki, kiedy pewne funkcje faktycznie działają drastycznie szybciej od innych - na przykład isset zamiast array_key_exists - o ile dobrze pamiętam to zamiana tych funkcji przyśpieszyła mój algorytm z 45 minut do ok 20 sekund (ale tam te funkcje były wykonywane kilkaset tysięcy razy). Dlatego warto stosować isset - o ile w wartościach tablicy nie ma wartości null.

[/offtopic]
Go to the top of the page
+Quote Post
pyro
post
Post #31





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


btw. mimo wszystko lepiej uzywać PCRE , ponieważ są bardziej rozbudowane, mają więcej opcji i mają być usunięte w PHP6, finito
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.09.2025 - 23:39