[PHP] Powtarzalność w wyrażeniu regularnym |
[PHP] Powtarzalność w wyrażeniu regularnym |
14.01.2014, 19:37:40
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 319 Pomógł: 118 Dołączył: 26.11.2003 Skąd: Lublin Ostrzeżenie: (0%) |
Witam
Załóżmy sobie wyrażenie:
Potrzebuję teraz pobrać wszystkie nawiasy, które są obok siebie, jako oddzielne elementy w tablicy, czyli powyższy przykład chcę aby docelowo wyglądał mniej więcej tak:
Dlaczego tak? Ponieważ znalazło w jednym ciągu wyrażenie [ab][cd][ef] a później [hi][jk] - cały ciąg został rozbity przez element "g", który był bez nawiasów, ale może to być dowolny znak, tylko nie nawias. Oczywiście staram się to potraktować pregiem, tylko mam tutaj problem z "nieskończonością ciągu". Nie wiem, czy nawiasów obok siebie będzie trzy, czy tysiąc i tu mam problem, może macie jakieś propozycje? Już skończyły mi się pomysły na wyrażenia, jedyne co mi teraz przychodzi do głowy to lecieć znak po znaku i sprawdzać gdzie nawias się otworzył i gdzie zamknął, ale podejrzewam, że musi być jakieś wyrażenie regularne, które to załatwi Ten post edytował Daimos 14.01.2014, 19:38:02 -------------------- scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
|
|
|
15.01.2014, 09:19:14
Post
#2
|
|
Grupa: Zarejestrowani Postów: 910 Pomógł: 44 Dołączył: 20.02.2008 Skąd: Łódź Ostrzeżenie: (20%) |
spróbuj czegoś takiego
pisane z pamięci więc może nie działać |
|
|
15.01.2014, 12:36:52
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 319 Pomógł: 118 Dołączył: 26.11.2003 Skąd: Lublin Ostrzeżenie: (0%) |
Ale w ten sposób znajdzie mi wszystkie nawiasy jako oddzielny element i nie będę wiedział jak wyglądał ich cały ciąg. Mi potrzebne oddzielnie ciągi nawiasów jak na przykładzie:
Muszę wiedzieć, że [ab][cd][ef] to był ciąg nawiasów, więc w sumie mogę i taki wynik dostać:
edit: Ok załatwiłem to takim wyrażeniem: Cytat '/(\([^\)|^\(]+\)){1,}/' Czarodziej {1,} o którym zapomniałem, rozwiązał problem. Zastanawia mnie tylko dlaczego mam dziwne wyniki, zazwyczaj preg_match daje mi w 1 kluczu tablicy pożądany wynik, tutaj mam w 0, natomiast w 1 mam ostatni nawias z ciągu. Dziwne, ale ogólnie działa Ten post edytował Daimos 15.01.2014, 12:48:47 -------------------- scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
|
|
|
15.01.2014, 16:37:09
Post
#4
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 22 Dołączył: 10.01.2014 Ostrzeżenie: (0%) |
Może i mój kod się wykonuje jak ślimak przy wyrażeniu. Ale chociaż działa ;P
http://wklej.to/0va2v var_dump na $matches daj u siebie. Wieczorem ci napisze wyrażenie choć osobiście ci go nie polecam. @Edit. Gdy zmniejszyłem ciag do takiego jak podałeś na forum to spadek jest tylko 8 krotny z 0.001 do 0.008 więc nie tak źle dla krótkich ciągów znaków Ten post edytował YourFrog 15.01.2014, 16:43:07 |
|
|
16.01.2014, 23:54:02
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 319 Pomógł: 118 Dołączył: 26.11.2003 Skąd: Lublin Ostrzeżenie: (0%) |
to się naprodukowałeś hehe, dzięki, ale jak pisałem na początku, nie chciałem iść tą drogą Moje wyrażenie działa, tylko akurat tu wkleiłem do przykładu z nawiasami okrągłymi ().
W każdym razie wielkie dzięki, nie sądziłem, że ktoś aż tak na poważnie podejdzie do tematu, oby więcej takich forumowiczów, pozdrawiam! -------------------- scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
|
|
|
19.01.2014, 16:36:48
Post
#6
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) |
preg_match_all('#(\[.*?\])(?!\[)#', $string, $result);
Oj, nie zauważyłem, że znalazłeś wzór sam, no ale jak już napisałem, to zostawiam dla potomnych alternatywne rozwiązanie z wykorzystaniem negative lookahead (nie wiem jak to po naszemu jest tłumaczone). Ten post edytował kreatiff 19.01.2014, 16:42:02 |
|
|
Wersja Lo-Fi | Aktualny czas: 12.06.2024 - 19:05 |