preg_match_all

(PHP 4, PHP 5, PHP 7)

preg_match_all执锟斤拷一锟斤拷全锟斤拷锟斤拷锟斤拷锟斤拷式匹锟斤拷

说锟斤拷

preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] ) : int

锟斤拷锟斤拷subject锟斤拷锟斤拷锟斤拷匹锟斤拷pattern锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷式 锟斤拷匹锟斤拷锟斤拷锟斤拷锟揭斤拷锟斤拷锟斤拷锟斤拷flag指锟斤拷顺锟斤拷锟斤拷锟斤拷锟�matches锟斤拷.

锟节碉拷一锟斤拷匹锟斤拷锟揭碉拷锟斤拷, 锟斤拷锟斤拷锟叫硷拷锟斤拷锟斤拷锟斤拷锟揭伙拷锟狡ワ拷锟轿伙拷锟斤拷锟斤拷锟�.

锟斤拷锟斤拷

pattern

要锟斤拷锟斤拷锟斤拷模式锟斤拷锟街凤拷锟斤拷锟斤拷式锟斤拷

subject

锟斤拷锟斤拷锟街凤拷锟斤拷锟斤拷

matches

锟斤拷维锟斤拷锟介,锟斤拷为锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷匹锟斤拷锟斤拷, 锟斤拷锟斤拷锟斤拷锟斤拷通锟斤拷flags指锟斤拷锟斤拷

flags

锟斤拷锟皆斤拷锟斤拷锟斤拷锟斤拷锟绞癸拷锟�(注锟解不锟斤拷同时使锟斤拷PREG_PATTERN_ORDER锟斤拷 PREG_SET_ORDER)锟斤拷

PREG_PATTERN_ORDER

锟斤拷锟斤拷锟斤拷锟轿�$matches[0]锟斤拷锟斤拷锟斤拷锟斤拷模式锟斤拷锟斤拷锟斤拷匹锟斤拷, $matches[1] 锟斤拷锟斤拷锟揭伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷匹锟戒,锟皆达拷锟斤拷锟狡★拷

<?php
preg_match_all
("|<[^>]+>(.*)</[^>]+>|U",
    
"<b>example: </b><div align=left>this is a test</div>",
    
$outPREG_PATTERN_ORDER);
echo 
$out[0][0] . ", " $out[0][1] . "\n";
echo 
$out[1][0] . ", " $out[1][1] . "\n";
?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test

锟斤拷锟�, $out[0]锟角帮拷锟斤拷匹锟斤拷锟斤拷锟斤拷模式锟斤拷锟街凤拷锟斤拷锟斤拷锟斤拷锟介, $out[1]锟角帮拷锟斤拷锟秸合憋拷签锟节碉拷锟街凤拷锟斤拷锟斤拷锟斤拷锟介。

锟斤拷锟斤拷锟斤拷锟斤拷锟绞斤拷锟斤拷锟斤拷舜锟斤拷锟斤拷频锟斤拷锟斤拷椋�$matches 锟斤拷锟斤拷锟斤拷锟斤拷舜锟斤拷锟斤拷锟斤拷锟斤拷锟侥硷拷锟斤拷

锟斤拷锟斤拷锟斤拷锟斤拷锟绞斤拷铮拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷耍锟斤拷锟斤拷锟斤拷锟揭诧拷锟斤拷锟斤拷榇拷锟斤拷锟� $matches[NAME] 锟叫★拷

<?php
preg_match_all
(
    
'/(?J)(?<match>foo)|(?<match>bar)/',
    
'foo bar',
    
$matches,
    
PREG_PATTERN_ORDER
);
print_r($matches['match']);
?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

Array
(
    [0] => 
    [1] => bar
)

PREG_SET_ORDER

锟斤拷锟斤拷锟斤拷锟轿�$matches[0]锟斤拷锟斤拷锟斤拷一锟斤拷匹锟斤拷玫锟斤拷锟斤拷锟斤拷锟狡ワ拷锟�(锟斤拷锟斤拷锟斤拷锟斤拷)锟斤拷 $matches[1]锟角帮拷锟斤拷锟节讹拷锟斤拷匹锟戒到锟斤拷锟斤拷锟斤拷匹锟斤拷(锟斤拷锟斤拷锟斤拷锟斤拷)锟斤拷锟斤拷锟介,锟皆达拷锟斤拷锟狡★拷

<?php
preg_match_all
("|<[^>]+>(.*)</[^>]+>|U",
    
"<b>example: </b><div align=\"left\">this is a test</div>",
    
$outPREG_SET_ORDER);
echo 
$out[0][0] . ", " $out[0][1] . "\n";
echo 
$out[1][0] . ", " $out[1][1] . "\n";
?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

<b>example: </b>, example:
<div align="left">this is a test</div>, this is a test

PREG_OFFSET_CAPTURE

锟斤拷锟斤拷锟斤拷锟斤拷潜锟斤拷锟斤拷荩锟矫匡拷锟斤拷锟斤拷值锟狡ワ拷浞碉拷锟绞憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷目锟斤拷锟街凤拷锟斤拷锟斤拷偏锟斤拷锟斤拷锟斤拷 注锟斤拷锟斤拷锟侥憋拷matches锟叫碉拷每一锟斤拷匹锟斤拷锟斤拷锟街凤拷锟斤拷元锟截o拷使锟斤拷 锟斤拷为一锟斤拷锟斤拷0锟斤拷元锟斤拷为匹锟斤拷锟斤拷锟街凤拷锟斤拷锟斤拷锟斤拷1锟斤拷元锟斤拷为 匹锟斤拷锟斤拷锟街凤拷锟斤拷锟斤拷subject锟叫碉拷偏锟斤拷锟斤拷锟斤拷

<?php
preg_match_all
('/(foo)(bar)(baz)/''foobarbaz'$matchesPREG_OFFSET_CAPTURE);
print_r($matches);
?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => foobarbaz
                    [1] => 0
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => foo
                    [1] => 0
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [0] => bar
                    [1] => 3
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [0] => baz
                    [1] => 6
                )

        )

)

锟斤拷锟矫伙拷懈锟斤拷锟斤拷锟斤拷锟斤拷牵锟斤拷俣锟斤拷锟斤拷锟轿�PREG_PATTERN_ORDER锟斤拷

offset

通锟斤拷锟斤拷 锟斤拷锟斤拷时锟斤拷目锟斤拷锟街凤拷锟斤拷锟侥匡拷始位锟矫匡拷始锟斤拷锟斤拷选锟斤拷锟斤拷offset锟斤拷锟斤拷 锟斤拷目锟斤拷锟街凤拷锟斤拷锟斤拷指锟斤拷位锟矫匡拷始锟斤拷锟斤拷(锟斤拷位锟斤拷锟街斤拷)锟斤拷

Note:

使锟斤拷 offset 锟斤拷锟斤拷锟斤拷同锟节达拷锟斤拷 substr($subject, $offset) 锟斤拷 锟斤拷锟斤拷锟� preg_match_all() 锟斤拷为目锟斤拷锟街凤拷锟斤拷锟斤拷锟斤拷为 pattern 锟斤拷锟皆帮拷锟斤拷锟斤拷锟皆憋拷锟斤拷^锟斤拷 $ 锟斤拷锟斤拷 (?<=x) 锟斤拷 示锟斤拷锟介看 preg_match()锟斤拷

锟斤拷锟斤拷值

锟斤拷锟斤拷锟斤拷锟斤拷匹锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�0锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷蠓祷锟�FALSE锟斤拷

锟斤拷锟斤拷锟斤拷志

锟芥本 说锟斤拷
5.4.0 锟斤拷锟斤拷matches锟斤拷为锟斤拷选锟侥★拷
5.3.6 锟斤拷锟� offset 锟斤拷锟斤拷 subject 锟侥程度o拷锟斤拷锟斤拷锟斤拷 FALSE锟斤拷
5.2.2 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤法锟斤拷锟皆斤拷锟斤拷(?<name>)锟斤拷(?'name')锟皆硷拷 (?P<name>)锟剿★拷 之前锟芥本锟斤拷锟斤拷锟斤拷(?P<name>)锟斤拷式锟斤拷

锟斤拷锟斤拷

Example #1 锟斤拷锟斤拷锟斤拷锟斤拷锟侥憋拷锟叫的电话锟斤拷锟诫。

<?php
preg_match_all
("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
                
"Call 555-1212 or 1-800-555-1212"$phones);
?>

Example #2 锟斤拷锟斤拷匹锟斤拷锟紿TML锟斤拷签锟斤拷贪锟斤拷锟斤拷

<?php
//\\2锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟矫碉拷示锟斤拷. 锟斤拷锟斤拷锟斤拷pcre锟斤拷锟斤拷锟斤拷匹锟斤拷锟斤拷锟斤拷锟斤拷式锟叫第讹拷锟斤拷圆锟斤拷锟斤拷(锟斤拷锟斤拷锟斤拷([\w]+))
//匹锟戒到锟侥斤拷锟�. 锟斤拷锟斤拷使锟斤拷锟斤拷锟斤拷锟斤拷斜锟斤拷锟斤拷锟斤拷为锟斤拷锟斤拷使锟斤拷锟斤拷双锟斤拷锟斤拷.
$html "<b>bold text</b><a href=howdy.html>click me</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/"$html$matchesPREG_SET_ORDER);

foreach (
$matches as $val) {
    echo 
"matched: " $val[0] . "\n";
    echo 
"part 1: " $val[1] . "\n";
    echo 
"part 2: " $val[2] . "\n";
    echo 
"part 3: " $val[3] . "\n";
    echo 
"part 4: " $val[4] . "\n\n";
}
?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

matched: <b>bold text</b>
part 1: <b>
part 2: b
part 3: bold text
part 4: </b>

matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: a
part 3: click me
part 4: </a>

Example #3 使锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷

<?php

$str 
= <<<FOO
a: 1
b: 2
c: 3
FOO;

preg_match_all('/(?P<name>\w+): (?P<digit>\d+)/'$str$matches);

/* 锟斤拷锟斤拷锟斤拷锟斤拷锟絧hp 5.2.2(pcre 7.0)锟斤拷锟斤拷甙姹撅拷鹿锟斤拷锟�, 锟斤拷锟斤拷, 为锟斤拷锟斤拷锟斤拷锟斤拷
 * 锟狡硷拷使锟斤拷锟斤拷锟斤拷姆锟绞�. */
// preg_match_all('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);

print_r($matches);

?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

Array
(
    [0] => Array
        (
            [0] => a: 1
            [1] => b: 2
            [2] => c: 3
        )

    [name] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

    [1] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

    [digit] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [2] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

)

锟轿硷拷

  • PCRE 匹锟斤拷
  • preg_quote() - 转锟斤拷锟斤拷锟斤拷锟斤拷式锟街凤拷
  • preg_match() - 执锟斤拷匹锟斤拷锟斤拷锟斤拷锟斤拷式
  • preg_replace() - 执锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷式锟斤拷锟斤拷锟斤拷锟斤拷锟芥换
  • preg_split() - 通锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷式锟街革拷锟街凤拷锟斤拷
  • preg_last_error() - 锟斤拷锟斤拷锟斤拷锟揭伙拷锟絇CRE锟斤拷锟斤拷执锟叫诧拷锟斤拷锟侥达拷锟斤拷锟斤拷锟�