Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inne][RegExp]
kokolis
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 23.10.2010

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


Moim celem jest wyłowienie z ciągu

  1. aaa(xxx),
  2. aaa(ddd) ,
  3. aaa(xx(wyrazenie1)xx),
  4. aaa(www),
  5. aaa(ww(wyrazenie2)s)


wszystkich zawartości z pomiędzy

  1. aaa(


i

  1. )


Niestety, wewnątrz a(...) mogą wystąpić wyrazenia otoczone nawiasami (są tylko dwie takie mozliwosci - (wyrazenie1) i (wyrazenia2)). Pomimo licznych prób nie udalo mi się napisać wzorca który pasowałby do przytoczonego przykładu. Bardzo prosiłbym choćby o jakieś wskazówki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
flashdev
post
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(kokolis @ 24.10.2010, 09:31:51 ) *
Ale dlaczego pomija nawias przy (wyrazenie1), a akceptuje ten po a(...). Idąc Twoim tokiem rozumowania powinienem znaleźć tylko jedno pasujące rozwiązanie i uzyskać zawartość spośród a( i ostatnim nawiasem, otrzymując wszystkie inne a(...) wewnątrz.

Ano właśnie, już wiem. Ciąg nie ma postaci linijka pod linijką. Napisałem tak tylko dla uproszeczenia. Dlatego Twoje instrukcje działają bez zarzutu. W jaki sposób mogę poradzić sobie z ciągiem

  1. aaa(...), aaa(...)


Dokładnie o to chodzi. Zobacz jaka będzie różnica po dodaniu flagi "s".
  1. preg_match_all('/aaa\((.*)\)/s', $str, $matches);


Do powyższego ciągu możesz użyć ponizszego kodu.

  1. <?php
  2.  
  3. $str = <<<HD
  4. aaa(xxx),aaa(ddd) ,aaa(xx(wyrazenie1)xx),aaa(www),aaa(ww(wyrazenie2)s)
  5. HD;
  6.  
  7. preg_match_all('/aaa\(([^,]*)\)/', $str, $matches);
  8.  
  9. var_dump($matches[1]);
  10.  
  11. fgets(STDIN);


Będzie działać, dopóki w nawiasie nie będzie przecinków.
Go to the top of the page
+Quote Post

Posty w temacie


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: 16.10.2025 - 07:45