Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne
szajens
post 4.09.2016, 11:00:32
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Witam,
próbuje sobie przypomnieć jak to było z wyrażeniami regularnymi i nie rozumiem dlaczego przechwytuje mi w taki sposób.

Kod:
  1. $foo = 'aa.aa.aa.aa.aaa.a.b.b.bb.b.b';
  2. $result[1] = preg_match('/^([a]{2}[\.])*([a-z\.]*)$/', $foo, $result[0]);
  3. echo '<pre>';
  4. print_r($result);

wynik:
  1. (
  2. [0] => Array
  3. (
  4. [0] => aa.aa.aa.aa.aaa.a.b.b.bb.b.b
  5. [1] => aa.
  6. [2] => aaa.a.b.b.bb.b.b
  7. )
  8.  
  9. [1] => 1
  10. )


dlaczego muszę dodać nawiasy
kod:
  1. preg_match('/^(([a]{2}[\.])*)([a-z\.]*)$/', $foo, $result[0]);

do przechwytywania aby uzyskać efekt:
  1. (
  2. [0] => Array
  3. (
  4. [0] => aa.aa.aa.aa.aaa.a.b.b.bb.b.b
  5. [1] => aa.aa.aa.aa.
  6. [2] => aa.
  7. [3] => aaa.a.b.b.bb.b.b
  8. )
  9.  
  10. [1] => 1
  11. )


przecież mam 0 lub więcej razy ([a]{2}[\.])*
Go to the top of the page
+Quote Post
Pyton_000
post 4.09.2016, 11:03:28
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


a może lepiej podasz wejście i wyjście żeby zrozumieć co chcesz zrobić/
Go to the top of the page
+Quote Post
szajens
post 4.09.2016, 11:14:34
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


chodzi mi raczej o zrozumienie tego.

mając ciąg znaków np: aa.aa.aa.aa.a.aaa.bbb.b.b.bbb.dergew.reerrr

chce oddzielić 2x 'a' z kropką od reszty.

i zastanawiam się dlaczego muszę użyć kolejnych nawiasów skoro ([a]{2}[\.])* powinno wyłapać 0 lub więcej razy a wyłapuje tylko pierwsze aa.

Ten post edytował szajens 4.09.2016, 11:15:20
Go to the top of the page
+Quote Post
Pyton_000
post 4.09.2016, 11:38:12
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Cytat
A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data


Kod
((a{2}\.)*)
Go to the top of the page
+Quote Post
szajens
post 4.09.2016, 12:02:03
Post #5





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


  1. (a{2}\.)*
  2. ((a{2}\.)*)


czyli jedno grupowanie nawiasami przechwyci raz
podwójne grupowanie przechwyci wiele razy?
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 Wersja Lo-Fi Aktualny czas: 29.03.2024 - 07:55