preg_match_all
(PHP 4, PHP 5)
preg_match_all — Reguláris kifejezés teljeskörű illesztését végzi
LeÃrás
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
- 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
- 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.
Example#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);
Example#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";
}
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()!