Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [wyrazenia regularne] <?php i ?>
Forum PHP.pl > Forum > PHP
czerpakzmiedzi
Mam problem z wyrażeniem regularnym, które ma wyciągać wszystko spomiedzy <?php i ?>. Niestety problem pojawia się wówczas kiedy użytkownik wpisze pomiędzy nimi np. '?>'; wtedy wszystko się wali. Próbowałem tak : ^<?php(.*^'?>')?>$
ale wtedy nie działa jeśli kod to np. 'shshshsh ?> dueufuuvfu'. Bardzo prosze o pomoc
lukasamd
Może spróbuj tak:

  1. <?php
  2. $ciag = '<?php ciploaldjdf ?> jdfidfndfjdf ?> fdfggffggff ?>';
  3. $wzorzec = '/<\?php\s.+\\s?>/';
  4.  
  5. $zmiana = preg_replace($wzorzec, 'TEST', $ciag);
  6.  
  7. echo $zmiana;
  8. ?>


W tym przykładowym kodzie w efekcie otrzymuje się ciąg TEST, więc pomija wszelkie wewnętrzne znaczniki.
Zyx
Oto wyrażenie twe:

Kod
preg_match_all('#(\<\?php(.|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\')+\?\>)#', $str, $found);


Robi dokładnie to, co chcesz osiągnąć: pomija wystąpienia w cudzysłowach i uwzględnia backslashe.
czerpakzmiedzi
Zyx mógłbyś bardziej rozwinąć o ch chodzi w tym wyrażeniu. Jest bardzo skomplikowane i nie bardzo go rozumiem.
Zyx
Ależ wręcz przeciwnie, ono jest prościutkie.

1. Wyszukaj wszystkie sekwencje rozpoczynające się od "<?php"
2. Następnie może iść znak lub sekwencja w APOSTROFACH powtórzone przynajmniej jeden raz.
- Sekwencja w apostrofach to ciąg znaków, który rozpoczyna się apostrofem i kończy apostrofem niepoprzedzonym znakiem backslasha.
3. Na końcu musi być sekwencja "?>"

Wypadałoby w sumie dodać jeszcze sekwencję w cudzysłowach do podpunktu drugiego, ale jest to kwestia po prostu zastąpienia występień \' przez " i wklejenia obok dotychczasowej treści jako alternatywa.
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.