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 (1 - 12)
flashdev
post
Post #2





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

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


  1. <?php
  2.  
  3. $str = 'aaa(xx(wyrazenie1)xx)';
  4. preg_match('/aaa\((.*)\)/', $str, $matches);
  5.  
  6. var_dump($matches);
  7.  
  8. fgets(STDIN);


O to chodzi?


--------------------
Go to the top of the page
+Quote Post
kokolis
post
Post #3





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

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


Prawie o to smile.gif

Podana przez Ciebie instrukcja dostarczy mi ciąg

  1. xx(wyrazenie1


a tymczasem rozchodzi się o

  1. xx(wyrazenie1)xx


Ten post edytował kokolis 23.10.2010, 14:39:38
Go to the top of the page
+Quote Post
Wicepsik
post
Post #4





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

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


Wartości są zawsze oddzielone przecinkiem ?


--------------------
Go to the top of the page
+Quote Post
kokolis
post
Post #5





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

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


Jesli pytasz o odstępy pomiędzy aaa(..) i kolejnym aaa() to tak, z wyjątkiem ostatniego.

Jednakowoż jeśli jest to jakiś problem moge to zmienić albo całkowicie pozbyć się odstepu pomiedzy nimi - jesli to moze cos pomóc.
Go to the top of the page
+Quote Post
flashdev
post
Post #6





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

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


Cytat(kokolis @ 23.10.2010, 15:39:12 ) *
Prawie o to smile.gif
[...]


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


--------------------
Go to the top of the page
+Quote Post
kokolis
post
Post #7





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

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


Cytat
Notice: Use of undefined constant STDIN


Aczkolwiek, zwracane wyniki są w porzadku. Dziękuję. Mógłbyś mi jeszcze tak szybko powiedziec coż to za tajemnicza STDIN i jak to zrobiłeś?

Ten post edytował kokolis 23.10.2010, 15:04:10
Go to the top of the page
+Quote Post
flashdev
post
Post #8





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

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


Cytat(kokolis @ 23.10.2010, 16:02:43 ) *
Aczkolwiek, zwracane wyniki są w porzadku. Dziękuję. Mógłbyś mi jeszcze tak szybko powiedziec coż to za tajemnicza STDIN i jak to zrobiłeś?


Żadna tajemnica, wszyscy o tym wiedzą nawet google -> http://www.google.pl/search?client=opera&a...-8&oe=utf-8 winksmiley.jpg

Edit:
Oczywiście ostatnia instrukcja jest tutaj zupełnie niepotrzebna. Dodaję ją tylko po to, żeby mieć więcej czasu niż ułamek sekundy na obejrzenie wyników w konsoli.

Ten post edytował flashdev 23.10.2010, 15:07:20


--------------------
Go to the top of the page
+Quote Post
kokolis
post
Post #9





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

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


Z tego co wyczytałem STDIN nie odgrywa tu większej roli. Jakim cudem Twoje wyrażenie pomija nawiasy wewn. nawiasów? Jak to możliwe bez żadnych dod. instrukcji?
Go to the top of the page
+Quote Post
flashdev
post
Post #10





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

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


Cytat(kokolis @ 23.10.2010, 16:07:28 ) *
Z tego co wyczytałem STDIN nie odgrywa tu większej roli. Jakim cudem Twoje wyrażenie pomija nawiasy wewn. nawiasów? Jak to możliwe bez żadnych dod. instrukcji?


Nie pomija, tylko dopasowuje do wzorca, jakim jest znak kropki ("." - pasuje do wszystkiego).


--------------------
Go to the top of the page
+Quote Post
kokolis
post
Post #11





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

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


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(...)
Go to the top of the page
+Quote Post
flashdev
post
Post #12





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
kokolis
post
Post #13





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

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


Niestety wewnątrz moga pojawić się przecinki :/
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 12:28