Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] wyrażenia regularne
PiratNowegoPokol...
post
Post #1





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 12.10.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


  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. ?>
Go to the top of the page
+Quote Post
PiratNowegoPokol...
post
Post #3





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 12.10.2006

Ostrzeżenie: (0%)
-----


drobne nie domówienie ... chce wyciągnąć wszystkie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
a to wyciągnie
Cytat
<!-- startIf( footer = "asd a" ) -->
A
<!--

I nie pozwoli już drugiego tagu zebrać ...
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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... :/

Ten post edytował Kicok 23.03.2007, 07:44:18
Go to the top of the page
+Quote Post
PiratNowegoPokol...
post
Post #5





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 12.10.2006

Ostrzeżenie: (0%)
-----


nadal mnie nie zrozumiałeś ... ale i tak dałeś odpowiedz (IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował PiratNowegoPokolenia 23.03.2007, 11:09:04
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 22:56