![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z wyrażeniem regularnym, poniżej przykład jak chciałem to rozwiązać, niestety nie działa.
Chodzi o to, aby sprawdzić czy w $string istnieje jedynka i trójka i piątka. Oczywiście cyfry są tylko dla ułatwienia, w rzeczywistości są to ciągi znaków i kolejność nigdy nie jest taka sama. Moje wyrażenie miało sprawdzić czy w stringu istnieje 1 lub 3 lub 5 dokładnie trzy razy, co wydaje się być logiczne i powinno działać, niestety z tego co widzę parser zwraca wystąpienie tylko raz przy pierwszym napotkanym true. Bardzo proszę o pomoc. Jak znaleźć czy w stringu istnieje 1 i 3 i 5. Dokładnie tłumacząc to co mam na myśli: $string może składać się z czegokolwiek ale musi zawierać 1 i 3 i 5 gdzie kolejność cyfr w $string jest przypadkowa. -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A może by tak użyć substr_count()
Ta funkcja zwraca liczbę wystąpień podanego ciągu w ciągu - a więc coś chyba o co Ci chodzi. Możesz napisac na jej podstawię taką funkcję, która sprawdzi podane wszystkie możliwe cyfry czy występują w podanym ciągu znaków tyle razy ile mają ![]() Prosty przykład:
Ten post edytował Sephirus 4.11.2011, 15:09:08 -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
![]() -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jedyne co mi zatem przychodzi do głowy to "bezczelne" sprawdzanie ale jest zupełnie nie konfigurowalne :/
W.R. niestety zwracają uwagę na kolejność - wydaje mi się że tylko w ten sposób możesz być pewien że na bank w tym ciągu występuję 1,3,5 w dowolnej kolejności ;/ Jeżeli się mylę chętnie dowiem się jak można to zrobić inaczej ;P -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
"/(1)\d+(3)\d+(5)\d+/"
@edit z tym że string to "123465789" Ten post edytował cojack 4.11.2011, 15:29:12 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
tak jest prościej, ale muszę powiedzieć, że mnie to nie satysfakcjonuje, tym bardziej, że szukanych może być na prawdę dużo ;( Jak ktoś ma jakiś dobry pomysł to proszę o sugestie, ehh "/(1)\d+(3)\d+(5)\d+/" @edit z tym że string to "123465789" Pisałem, że kolejność może być inna, czyli jeśli $string przyjmie wartość 987654321 to już nie wyłapie -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie jest prościej bo jest źle
![]() Mi się wydaję, że się nie da ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#8
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Coś takiego wymodziłem:
ale musisz sprawdzić na swoich stringach, czy działa prawidłowo -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Nie jest prościej bo jest źle ![]() Mi się wydaję, że się nie da ![]() No nie dodałem, że w $string każda fraza może wystapić tylko i wyłącznie raz. Może być 1,2,3,4 ale nie może być 1,1,2,3 Coś takiego wymodziłem:
ale musisz sprawdzić na swoich stringach, czy działa prawidłowo dziala, ale tak jak napisal sephirus, przejdzie kazda fraza Ogólnie chodziło mi o to żeby zapis był krótki i czytelny, tak jak, np. ((1)|(2)|(3)){3} (szkoda, że nie działa). No nic, w takim wypadku będę musiał osobno pisać pod SQL procedurę powtarzającą FIND_IN_SET(); a w PHP to już bzdurka ![]() Jak ktoś znajdzie jakieś sensowne rozwiązanie, zakładając, że szukanych jest dziesiątki, a nie tylko trzy sztuki to bardzo proszę o napisanie tego w tym poście Ten post edytował cudny 4.11.2011, 15:49:05 -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#10
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Cytat dziala, ale tak jak napisal sephirus, przejdzie kazda fraza Kurczę, faktycznie. Hmm, ciekawy problem ![]() -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ok skoro jeszcze chcesz bez powtórzeń to wymiękam
![]() Swoją drogą dodam tylko, że mój sposób bez preg_matchy może być bez problemu wykonany również przez funkcję z SQL gdybyś chciał to ładnie zrobić to i PHP i SQL to łykną bez wyrażeń ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Może po prostu napisz o jaki konkretny problem chodzi? Bo mam wrażenie że szukasz rozwiązania bardzo na około.
Bo raz piszesz: Cytat Moje wyrażenie miało sprawdzić czy w stringu istnieje 1 lub 3 lub 5 dokładnie trzy razy, a zaraz: Cytat No nie dodałem, że w $string każda fraza może wystapić tylko i wyłącznie raz.
Ten post edytował melkorm 4.11.2011, 16:03:50 -------------------- |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Ale baaaardzo duże ciągi by to były
![]() Napisanie wyrażenia nie stanowi dla mnie większej trudności ![]() Zrobię sobie procedurkę w SQL, a dla PHP napiszę jakąś funkcję ![]() Oczywiście nadal czekam na pomysły ![]() Jak sprawdzić czy zbiór: 1,2,3,4,5 zawiera 1 i 3 i 5 ![]() melkorm cyt. "Może po prostu napisz o jaki konkretny problem chodzi? Bo mam wrażenie że szukasz rozwiązania bardzo na około." A ja się spytam: Co ma piernik do wiatraka ? Przeczytaj o co chodzi w poście, a potem odpowiedz sensownie, bo jak nie znasz odpowiedzi to spamuj gdzie indziej Ten post edytował cudny 4.11.2011, 16:12:20 -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Do spamerów raczej nie należę, ale najwidoczniej sam nie potrafisz sobie sam odpowiedzieć na to co chcesz, przychodzisz pytasz o pomoc, jakbyś nakreślił dokładnie problem i warunki o wiele łatwiej byłoby nam zdiagnozować problem i/lub znaleźć bardziej optymalne / czytelniejsze / łatwiejsze rozwiązanie.
PS. Jeżeli sądzisz że pomaganie na forum to tylko ślepe udzielanie odpowiedzi na zadane pytania bez podsuwania ewentualnych, prostszych i łatwiejszych rozwiązań to się grubo mylisz. PS2. Jeżeli masz zamiar znowu pisać o jakiejkolwiek formie mojego spamowania to sobie daruj, bo raczej nie znasz pojęcia `spamowanie`. PS3. Wątek przeczytałem cały. -------------------- |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Może po prostu napisz o jaki konkretny problem chodzi? Bo mam wrażenie że szukasz rozwiązania bardzo na około. Bo raz piszesz: a zaraz: Do spamerów raczej nie należę, ale najwidoczniej sam nie potrafisz sobie sam odpowiedzieć na to co chcesz, przychodzisz pytasz o pomoc, jakbyś nakreślił dokładnie problem i warunki o wiele łatwiej byłoby nam zdiagnozować problem i/lub znaleźć bardziej optymalne / czytelniejsze / łatwiejsze rozwiązanie. PS. Jeżeli sądzisz że pomaganie na forum to tylko ślepe udzielanie odpowiedzi na zadane pytania bez podsuwania ewentualnych, prostszych i łatwiejszych rozwiązań to się grubo mylisz. PS2. Jeżeli masz zamiar znowu pisać o jakiejkolwiek formie mojego spamowania to sobie daruj, bo raczej nie znasz pojęcia `spamowanie`. PS3. Wątek przeczytałem cały. Inni zrozumieli ![]() Nie bierz tego do siebie hehe chodzi o to, że jedno z drugim się nie wykluczało. Zobacz: Cytat Moje wyrażenie miało sprawdzić czy w stringu istnieje 1 lub 3 lub 5 dokładnie trzy razy, I podałem przykład: $string = '1,2,3,4,5,6'; 1 lub 3 lub 5 mają wystąpić dokładnie trzy razy - i tutaj to nie porozumienie - trzy razy czyli raz jedynka, raz trójka i raz piątka - daje 3 ? ![]() Cytat No nie dodałem, że w $string każda fraza może wystapić tylko i wyłącznie raz. A tutaj wyraźnie napisałem, że w $string czyli 1,2,3,4,5,6 posiada tylko i wyłącznie po jednej sztuce 1 i 2 i 3 i 4 i 5 i 6 Dla tego logiczne wydało mi się, że preg_match('/((1)|(3)|(5)){3}/', '1,2,3,4,5,6'); zwróci true tylko i wyłącznie przy wystąpieniu którejkolwiek z fraz po jednym razie, a tu kupa ![]() Doszedłem do wniosku, że chyba nie da się wyrażeniami tego rozwiązać (oczywiście nie dłuuuugaśnymi, już lepiej zrobić ładną funkcję, która będzie pewnie bardziej wydajna). Oczywiście jeżeli ktoś wykaże, że się mylę będę niezmiernie wdzięczny ![]() melkorm - sorki, oceniłem twojego posta jako atak ![]() Rozwiązanie: Dla tego co jest podane wyżej rozwiązanie raczej istnieje tylko i wyłącznie poprzez robienie dluuugich wyrażeń używających olbrzymiej ilości logicznego OR, co jak pisałem mija się z celem i jest nie wydajne. Mam jednak możliwość posortowania tego (nie napisałem tego wcześniej bo nie wiedziałem), więc da się to zrobić najprościej na świecie:
Chodzi o to że jeżeli wiem, że cyfry w $string są rosnące i cyfry, których szukam też to zawsze po 3 będzie 7 a po niej będzie 10 i tak dalej Proszę nie zamykać tematu, może jednak ktoś ma jakieś fajne rozwiązanie nie używając sortowania, było by to ciekawe ![]() Ten post edytował cudny 4.11.2011, 16:54:08 -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Inni zrozumieli Ja też, ale po Twoich wyjaśnieniach wyszło że i tak źle zrozumiałem bo wybrałem zły tok myślenia ![]() Cytat Doszedłem do wniosku, że chyba nie da się wyrażeniami tego rozwiązać (oczywiście nie dłuuuugaśnymi, już lepiej zrobić ładną funkcję, która będzie pewnie bardziej wydajna). I dobrze myślisz, jeżeli się da to lepiej unikać wyrażeń regularnych (upraszczając oczywiście). Cytat melkorm - sorki, oceniłem twojego posta jako atak Spoko, zapomniałem wstawić kilku fikuśnych emotek i jakoś powiało grozą z tego posta ![]() PS. Jak zrobisz, to wstaw swoje rozwiązania, z chęcią zobaczę jak to w końcu wyszło. -------------------- |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(cudny) Doszedłem do wniosku, że chyba nie da się wyrażeniami tego rozwiązać (oczywiście nie dłuuuugaśnymi, już lepiej zrobić ładną funkcję, która będzie pewnie bardziej wydajna). No cóż... mylić się jest rzeczą ludzką Cytat(melkorm) I dobrze myślisz, jeżeli się da to lepiej unikać wyrażeń regularnych (upraszczając oczywiście). To znaczy, że musisz jeść więcej warzyw. Możliwe, że czegoś nie zrozumiałem, ale to wyrażenie powinno sprawdzić czy w $string występują dane liczby tylko raz w danej kolejności. Chyba o to chodziło? -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Oczywiście cyfry są tylko dla ułatwienia, w rzeczywistości są to ciągi znaków i kolejność nigdy nie jest taka sama. Raczej na Twoje rozwiązanie ktoś by wcześniej wpadł gdyby kolejność była ustalona. -------------------- |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Raczej na Twoje rozwiązanie ktoś by wcześniej wpadł gdyby kolejność była ustalona. Rozumiem, ale to również nie problem ![]() Proszę: Ten post edytował pyro 4.11.2011, 17:34:34 -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem, ale to również nie problem ![]() Proszę:
Dla takich wartości też zwróci true. Chociaż pomysł nie głupi ![]() Ok ![]() Oczywiście wiem, że tylko ja wiem do czego to ma służyć i jak powinno wyglądać dokładnie, więc było mi duuuużo łatwiej niż Wam, ale i tak ciesze się, że mi się udało ![]() to czego szukam to nie są liczby jak już pisałem. są to ID które ukrywają w sobie także inne dane wykorzystywane później, ale mniejsza z tym. Ciąg, w którym szukam wygląda mniej więcej tak:
W $string nie ma możliwości aby się powtarzały poszczególne ID, to znaczy nie może to być:
bo 1_1_1 powtarza się. Jest to zabezpieczone dużo wcześniej i nie będzie takiej sytuacji. W $string muszą być takie oto ID: 1_1_2 i 1_1_1 i 1_4_1 Powyższe ID muszą być wszystkie dokładnie po jednym razie każdy. Rozwiązanie:
Po prostu odwróciłem troszki to czego szukam. Chodzi o to, że $search może składać się tylko i wyłącznie z tego co jest w $string i to musi się powtórzyć tyle razy ile jest szukanych w $search + ilość przecinków czyli 1_1_2 + 1_2_2 + 1_1_4 + dwa przecinki = {5} Jak się podoba ![]() Ten post edytował cudny 4.11.2011, 21:24:47 -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.06.2025 - 17:51 |