Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [php] wyrażenia regularne

Napisany przez: netmare 7.03.2008, 17:06:47

Chciałbym się czegoś nauczyć o wyrażeniach regularnych, przed chwilą przeczytałem wątek potreb'a i byłbym wdzięczny jakby mi to ktoś wytłumaczył

  1. <?php
  2. $text = '<a name="akt053322"></a> fggfgf <a name="akt053322"></a>';
  3. http://www.php.net/preg_match_all('[<a name="(.+?)"></a>]is', $text, $matches);
  4. ?>


Ten preg_match ma wyłuskać to akt053322
To czego nie rouzmiem:
1. Dlaczego .+? a nie .+
2. Co w tym przypadku oznacza []is
3. dlaczego nie ma znaczka / na końcu i na początku

Napisany przez: sopel 7.03.2008, 17:21:42

1.
znak zapytania wyłączą "chciwość". w przeciwnym razie interpeter mógłby zebrać wszystko do końca. patrz: http://pl2.php.net/manual/en/reference.pcre.pattern.modifiers.php i opis modifiera U (PCRE_UNGREEDY)

2.
[] to delimetery w tym zapytaniu, natomiast "is" to modifiery (patrz link powyżej]

3.
ponieważ "Any character can be used for delimiter as long as it's not alphanumeric or backslash (\)" (manual, pierwszy akapit na http://pl.php.net/pcre). w powyższym wyrażeniu delimiterem są []. pewnie autor chciał uniknąć konieczności wstawiania backslasha przed slashes w </a>. ze slashem jako delimiterem wyglądałoby to tak: '/<a name="(.+?)"><\/a>/is'.

Napisany przez: netmare 7.03.2008, 17:36:11

1. Gdzieś czytałem, że delimitery powinny być takie same, ktoś źle napisał czy nawiasy kwadratowe to wyjątek?
2. Czy jeżeli używa się jako delimiterów [ ] to chcąc zdefiniować klasę trzeba użyc \ przed nawiasami?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)