![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 313 Pomógł: 5 Dołączył: 22.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale to wytnie wszystkie wystąpienia, nie tylko ostatnie. Powinno być (dolar na końcu):
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
i nie + (maksymalistyczny)
tylko +? (minimalistyczny) |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale to wytnie wszystkie wystąpienia, nie tylko ostatnie. Powinno być (dolar na końcu):
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 i nie + (maksymalistyczny) tylko +? (minimalistyczny) (zgodnie z poprzednikiem) Niby dlaczego? Ten post edytował pyro 4.11.2008, 17:30:22 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
[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 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 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. 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 |
|
|
![]()
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)
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
[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 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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 |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 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: (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:
lol, okazuje sie ze ereg jest szybsze od preg... &*T^&? |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 8 Dołączył: 20.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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] |
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#26
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
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().
|
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 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] 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... |
|
|
![]()
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 |
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
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) |
|
|
![]()
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] |
|
|
![]()
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
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 23:39 |