![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 1 Dołączył: 29.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Na wstępie wybaczcie mi ten tytuł, naprawdę nie wiem jak opisać mój problem w tytule.
Generalnie chcę, aby był wyłapywany ciąg znaków, który jest zawarty w nawiasie. Problemu nie ma, gdy mam niemieszane nawiasy:
Wyrażenie regularne wygląda tak:
Jednakże problem jest, bo te nawiasy są mieszane:
I tutaj też w zasadzie problemu nie ma:
Problem następuje, kiedy nawiasy są mieszane i jest kilka "głównych":
Stosując takie wyrażenie:
Wyciągnie on:
A stosując takie:
Wyciągnie on:
A mi zależy na tym, aby wyciągnąć:
Czyli tyle ile razy nawias został otwarty to tyle razy musi zostać zamknięty. Ktoś ma pomysł, jak się do tego zabrać? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 350 Pomógł: 512 Dołączył: 4.01.2009 Skąd: Wrocław / Świdnica Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 711 Pomógł: 127 Dołączył: 5.07.2008 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 1 Dołączył: 29.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Super, dzięki
![]() Jednak mam pytanie odnośnie tego: masz może jakiś artykuł w internecie, gdzie były by wyrażenia regularne bardziej zaawansowane? Ze wszystkimi artykułami, z którymi się spotkałem (przykład) to podstawy, nie ma w nich mowy o tym, co użyłeś powyżej (np. "?:", "+|" czy "?R") ![]() Ten post edytował Sebusik 10.08.2011, 20:20:55 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 711 Pomógł: 127 Dołączył: 5.07.2008 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio się natknąłem na takie coś: http://gajdaw.pl/php/wyrazenia-regularne-p...utorial/p1.html
Resztę zagadnień związanych z PCRE łatwiej odnaleźć na anglojęzycznych stronach. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 1 Dołączył: 29.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki jeszcze raz
![]() ![]() --- No i jednak mam problem. Wyrażenie działa poprawnie, ale gdy mam np. taki tekst:
To nie wykrywa tego podwójnego nawiasu (co jest zasługą pojedynczego w środku). Da się coś z tym zrobić ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Pewnie by się dało (nie zajmowałem się odwołaniami rekurencyjnymi w wydaniu PHP-owskich wyrażeń regularnych, więc nie mam pewności), ale tutaj już powoli wkraczasz w problemy, do rozwiązywania których nie powinieneś wykorzystywać wyrażeń regularnych - nie nadają się one do tego typu zadań.
Prawdopodobnie najlepszym rozwiązaniem byłoby tutaj napisanie prostego parsera, który analizując znak po znaku byłby wstanie przekształcić to w jakąś normalną strukturę. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 04:04 |