PHP kézikönyv
Előző |  | Következő

# preg_match_all

(PHP 3 >= 3.0.9, PHP 4, PHP 5)

preg_match_all -- Reguláris kifejezés teljeskörű illesztését végzi

## Leírás

int preg_match_all ( string pattern, string subject, array matches [, int flags] )

A subject szövegben megkeresi az összes, a pattern mintára illeszkedő részt, és a matches tömbbe menti azokat az order paraméterben meghatározott sorrendben.

Amint az első illeszkedés megtalálta, a soron következő illesztést az utolsó illeszkedés végétől folytatja.

A flag paraméter az alábbi értékek kombinációja lehet (bár értelmetlen a `PREG_PATTERN_ORDER`-t és a `PREG_SET_ORDER`-t együtt használni):

PREG_PATTERN_ORDER

  Azt eredményezi, hogy a $matches[0] olyan tömb lesz, ahol az összes a teljes mintára illeszkedő szövegrész lesz egymás után, a $matches[1] tömbben pedig azok a szövegrészek, amelyek első "gyűjtő" részmintára illeszkednek, és így tovább.

  `preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", "<b>példa: </b><div align=left>ez itt a teszt szöveg</div>", $out, PREG_PATTERN_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"`

  Ez a példa az alábbi eredményt adja:

      <b>példa: </b>, <div align=left>ez itt a teszt szöveg</div>
      példa: , ez itt a teszt szöveg

  Tehát, az $out[0] egy tömb az összes, teljes mintára illeszkedő szöveggel, és $out[1] egy tömb az összes HTML-elem közti szöveggel.
PREG_SET_ORDER

  Azt eredményezi, hogy $matches[0]-ben az első illesztés eredményeit, a $matches[1] a másodikét fogja tartalmazni, és így tovább.

  `preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", "<b>példa: </b><div align=left>ez itt a teszt szöveg</div>", $out, PREG_SET_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"`

  Ez a példa az alábbi eredményt adja:

      <b>példa: </b>, példa:
      <div align=left>ez itt a teszt szöveg</div>, ez itt a teszt szöveg

  Ebben az esetben $matches[0] az első illesztés során megtalált szövegrészeket tartalmazza, a $matches[0][0]-ban a teljes mintára illeszkedő szöveggel, $matches[0][1]-ban az első "gyűjtő" részmintára illeszkedő résszel, és így tovább. Ehhez hasonlóan $matches[1] a második illesztés során megtalált szövegeket tartalmazza, stb.
PREG_OFFSET_CAPTURE

  Minden egyezéshez az egyezés kezdőpozícióját is visszaadja az eredményben. Ez maga után vonja, hogy a visszaadott tömb minden eleme olyan tömb lesz, amelynek a 0. indexe az illeszkedő szöveget tartalmazza, míg az 1. indexen levő elem ennek a subject-en belüli kezdőpozicióját. Ez a jelzőbit PHP 4.3.0 verziójától használható.

Ha nincs megadva a flag paraméter, akkor az alapértelmezés a `PREG_PATTERN_ORDER`.

Ez a függvény az összes illeszkedés számával tér vissza (ami lehet akár 0 (!) is sikertelen illesztés esetén), vagy `FALSE`-szal hiba esetén.

Példa 1. Az összes telefonszám kigyűjtése egy adott szövegből.
`preg_match_all ("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Hívd a 555-1212 vagy 1-800-555-1212 számot", $phones);`

Példa 2. HTML elemek keresése (mohón)
`// A \\2 példa a "gyűjtő" részmintára történő hivatkozásra. Ez mondja meg // PCRE-nek, hogy a másodikként megadott kerek zárójelre - ami ebben az // esetben ([\w]+) - illesztett szövegnek kell szerepelnie a hivatkozás // helyén is. A plusz visszaperjelre azért van szükség, mert a minta // macskakörmök ("") közé van fogva. $html = "<b>félkövér szöveg</b><a href=howdy.html>kattints ide</a> preg_match_all ("/(<([\w]+)[^<]*>)(.*)(<\/\\2>)/", $html, $matches); for ($i=0; $i < count($matches[0]); $i++) { echo "passzolt: ".$matches[0][$i]."\n"; echo "1. rész: ".$matches[1][$i]."\n"; echo "2. rész: ".$matches[3][$i]."\n"; echo "3. rész: ".$matches[4][$i]."\n\n"; }`

A példa ezt eredményezi:

    passzolt: <b>félkövér szöveg</b>
    1. rész: <b>
    2. rész: félkövér szöveg
    3. rész: </b>

    passzolt: <a href=howdy.html>kattints ide</a>
    1. rész: <a href=howdy.html>
    2. rész: kattints ide
    3. rész: </a>

Lásd még: preg_match(), preg_replace(), és preg_split()!

Előző | Tartalom | Következő
preg_last_error | Fel | preg_match