Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wyrażenia regularne
Forum PHP.pl > Forum > PHP
PiratNowegoPokolenia
Witam

Mam mały problem ... mianowicie chce z tekstu:
Kod
<!-- startIf( footer = "asd a" ) -->
A
<!-- elseIf( s = true ) -->
B
<!-- else -->
C
<!-- endIf -->

Wyciągnąć A ... Jak narazie robiłem to w jednym wyrażeniu
'/<!--\ (start|else)If\((\ +[^)]+\ +)\)\ -->([^<]*)/si'
ale wogóle się to nie sprawuje ... szczególnie fragment ([^<]*) bo kłóci się z htmlem ...
Właściwie to nie mam wogóle pomysłów jak to zrobić ... proszę o pomoc sadsmiley02.gif
Kicok
  1. <?php
  2. $txt = '<!-- startIf( footer = "asd a" ) -->
  3. A
  4. <!-- elseIf( s = true ) -->
  5. B
  6. <!-- else -->
  7. C
  8. <!-- endIf -->';
  9.  
  10. preg_match('/<!--s+(?:start|else)if(.*?)s+-->s*(.*?)s*<!--/si', $txt, $array);
  11. $export = var_export($array, true);
  12. ?>
PiratNowegoPokolenia
drobne nie domówienie ... chce wyciągnąć wszystkie sad.gif
a to wyciągnie
Cytat
<!-- startIf( footer = "asd a" ) -->
A
<!--

I nie pozwoli już drugiego tagu zebrać ...
Kicok
Do najpiękniejszych rozwiązań to nie należy, ale w tym przypadku powinno działać:
  1. <?php
  2. $txt = '<!-- startIf( footer = "asd a" ) -->
  3. A
  4. <!-- elseIf( s = true ) -->
  5. B
  6. <!-- else -->
  7. C
  8. <!-- endIf -->';
  9.  
  10. preg_match_all('/--s*(?:start|else|end)(?:if)?(?:(.*?))?s*-->s*(.*?)s*<!/si', $txt, $array);
  11. $export = var_export($array[1], true);
  12. echo('$array[1]:<br /><br />'.htmlspecialchars($export));
  13. ?>



A przy okazji sam mam pytanie. Jak zrobić, żeby pogrubione części wyrażenia z preg_match_all() pasowały do jednego wystąpienia "<!--" w tekście?
Cytat
<!--\s*(?:st{...}\s*-->\s*(.*?)\s*<!--

Gdy stosowałem to do powyższego problemu, to po dopasowaniu do A nie chciało już dopasować do B, przez to: "<!--" na końcu wyrażenia... :/
PiratNowegoPokolenia
nadal mnie nie zrozumiałeś ... ale i tak dałeś odpowiedz smile.gif
Cytat
Gdy stosowałem to do powyższego problemu, to po dopasowaniu do A nie chciało już dopasować do B, przez to: "<!--" na końcu wyrażenia... :/

O to mi dokładnie chodziło ... a tyle co to sam zrobiłem :/

Cytat
Mechanizm nie zadziała zgodnie z oczekiwaniami, gdy napiszesz ^mały|średni|duży$ – wyrażenie to nie znajdzie linii, składających się jedynie ze słów mały, średni czy też duży. Znajdzie ono za to linie, w których słowo mały jest umiejscowione na początku, słowo średni w dowolnym jej miejscu, a duży na końcu linii.
from : http://grabun.com/wyrazenia-regularne/alte...y-i-priorytety/

Nie ma mnie teraz w domu i nie mogę tego wypróbować ... No ale do się do tego na pewno przyda
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.