![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 79 Dołączył: 16.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Hej.
Powiedzmy, że mamy taki string:
Chcę złapać (i ewentualnie zastąpić funkcją preg_replace_callback) wszystkie wystąpienia @include wraz z ich parametrami, robię więc:
No i działa OK, tzn. łapię to @include wraz z parametrami Problem pojawia się, gdy w $stringu źródłowym, w samym parametrze pojawi się przecinek. Np:
Tutaj w okolicach "param1" oraz czegoś co ma być arrayem są przecinki, chciałbym by były one elementem tego parametru, niestety oczywiście po użyciu funkcji "explode" ona widzi te przecinki i powstają bzdury. Co mam zrobić, by przecinki będące w apostrofach były brane dosłownie, a nie były rozdzielnikiem parametrów? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Trzeba zamiast explode użyć coś bardziej skomplikowanego. Można iść ponownie w wyrażenia regularne, np.:
Ale trzeba to posprawdzać na wszystkich mozliwych kombinacjach występujących przy @include. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 79 Dołączył: 16.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, działa!
Nic a nic nie rozumiem z tego wyrażenia ![]() Muszę mocno wreszcie się za edukację w tym zakresie wziąć. Jeśli to nie będzie skomplikowane, to jeszcze jedna drobnostka ![]()
To wyrażenie rozdziela też to co znajduje się pomiędzy nawiasami kwadratowymi [ oraz ] - a dałoby się by nie rozdzielało? Czyli by też zostawiło tak jak jest? Myślałem, że po tym jak teraz poznałem funkcję preg_split to może dam radę sam, ale tak jak powiedziałem, to wyrażenie to dla mnie czarna magia... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ja otrzymuję taki wynik po zastosowaniu wyrażenia, które zaproponowałem:
Czyli to co w indeksie nr 2 ma być inne? Wyjaśnij i zobaczymy co da się zrobić. Co do wyrażenia regularnego, to szuka ono przecinka, który jest poprzedzony albo apostrofem, albo zamknięciem nawiasu kwadratowego. I string jest cięty tylko w miejscach przecinków spełniających to założenie. ?<= - positive lookbehind, po tych symbolach wypisujemy znaki, które muszą poprzedzać dopasowany znak (ciąg) (?: ... ) - nie łap tej grupy do wyniku, w sumie to jest zbędne, preg_split niczego "nie łapie", zapędziłem się, bo bardzo rzadko z tej funkcji korzystam, przeciwnie do preg_match, gdzie to z kolei już jest często stosowane (poniżej dałem uproszczone wyrażenie)) \'|\] - znaki, które muszą poprzedzać nasz przecinek, by ten był uwzględniony jako miejsce cięcia ciągu , - szukaj przecinka (poprzedzonego tym co wyżej wyznaczone) Wyrzucając to co zbędne, mamy takie wyrażenie: Ten post edytował kreatiff 13.06.2015, 23:58:24 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 79 Dołączył: 16.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wow, dzięki za wyrażenie i wytłumaczenie!
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.06.2025 - 08:30 |