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

��������DZ����ݣ�ÿ�����ֵ�ƥ�䷵��ʱ�����������Ŀ���ַ�����ƫ������ ע�����ı�matches�е�ÿһ��ƥ�����ַ���Ԫ�أ�ʹ�� ��Ϊһ����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 �ij̶ȣ������� 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 ����ƥ���HTML��ǩ��̰����

<?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);

/* ���������php 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
        )

)

�μ�