Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne
Forum PHP.pl > Forum > PHP
szajens
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}[\.])*
Pyton_000
a może lepiej podasz wejście i wyjście żeby zrozumieć co chcesz zrobić/
szajens
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.
Pyton_000
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}\.)*)
szajens
  1. (a{2}\.)*
  2. ((a{2}\.)*)


czyli jedno grupowanie nawiasami przechwyci raz
podwójne grupowanie przechwyci wiele razy?
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.