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. |
|
|
|
![]() |
Post
#2
|
|
|
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 (IMG:style_emoticons/default/tongue.gif) 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 ? (IMG:style_emoticons/default/smile.gif) 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 (IMG:style_emoticons/default/tongue.gif) po pierwszym wystąpieniu zwraca true i przerywa - czyli ((1)|(3)|(5)) nigdy nie wystąpi trzy razy. 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 (IMG:style_emoticons/default/smile.gif) melkorm - sorki, oceniłem twojego posta jako atak (IMG:style_emoticons/default/tongue.gif) 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 (IMG:style_emoticons/default/smile.gif) Ten post edytował cudny 4.11.2011, 16:54:08 |
|
|
|
cudny preg_match() 4.11.2011, 14:55:11
Sephirus A może by tak użyć substr_count()
Ta funkcja zwra... 4.11.2011, 15:06:01
cudny nie chodzi mi o funkcję, to musi być wyrażenie reg... 4.11.2011, 15:09:05
Sephirus Jedyne co mi zatem przychodzi do głowy to "be... 4.11.2011, 15:20:52
cojack "/(1)\d+(3)\d+(5)\d+/"
@... 4.11.2011, 15:27:00
cudny [PHP] pobierz, plaintext echo preg_match('/... 4.11.2011, 15:34:53
Sephirus Nie jest prościej bo jest źle String "111... 4.11.2011, 15:35:35
blooregard Coś takiego wymodziłem:
[PHP] pobierz, plaintext ... 4.11.2011, 15:39:52
cudny Cytat(Sephirus @ 4.11.2011, 15:35:35 ... 4.11.2011, 15:44:59
blooregard Cytatdziala, ale tak jak napisal sephirus, przejdz... 4.11.2011, 15:49:36
Sephirus Ok skoro jeszcze chcesz bez powtórzeń to wymiękam ... 4.11.2011, 15:57:59
melkorm Może po prostu napisz o jaki konkretny problem cho... 4.11.2011, 16:02:36
cudny Ale baaaardzo duże ciągi by to były
Napisanie wyr... 4.11.2011, 16:09:43
melkorm Do spamerów raczej nie należę, ale najwidoczniej s... 4.11.2011, 16:16:35
melkorm CytatInni zrozumieli
Ja też, ale po Twoich wyjaśni... 4.11.2011, 16:46:50
pyro Cytat(cudny)Doszedłem do wniosku, że chyba nie da ... 4.11.2011, 17:04:34
melkorm CytatOczywiście cyfry są tylko dla ułatwienia, w r... 4.11.2011, 17:12:30 
pyro Cytat(melkorm @ 4.11.2011, 17:12:30 )... 4.11.2011, 17:32:23
cudny Cytat(pyro @ 4.11.2011, 17:32:23 ) Ro... 4.11.2011, 20:46:55 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 18:02 |