int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )前面两项是我们常用的,$pattern是正则匹配模式,$string是要匹配的字符串。
$mode = "/a=(d+)b=(d+)c=(d+)/";$str="**a=4b=98c=56**";$res=preg_match($mode,$str,$match);var_dump($match);结果如下:
array (size=4)=> string "a=4b=98c=56" (length=11)=> string "4" (length=1)=> string "98" (length=2)=> string "56" (length=2)现在我们知道了什么是捕获组,捕获组是正则表达示中以()括起来的部分,每一对()是一个捕获组。
按图中的匹配模式匹配时,捕获组的123号分别是红绿蓝。
捕获组的忽略与命名
我们还可以阻止PHP为匹配组的编号:在匹配组中模式前加 ?:
$mode = "/a=(d+)b=(?:d+)c=(d+)/";
这样,匹配结果就会变成:
array (size=3)=> string "a=4b=98c=56" (length=11)=> string "4" (length=1)=> string "56" (length=2)当然,我们也可以在括号的内部为它给它独特的名字。
array (size=5)=> string "a=4b=98c=56" (length=11)=> string "4" (length=1) "sec" => string "98" (length=2)=> string "98" (length=2)=> string "56" (length=2)在保留索引数组的同时,加上一个关联项,key值为捕获组名。
$mode = "/a=(d+)b=(d+)c=(d+)/";$str="**a=4b=98c=56**";$rp="1/$2/3/";echo preg_replace($mode,$rp,$str);//**4/98/56/**1表示捕获组1(4),$2为捕获组2(98),3为捕获组3(56)。
$pattern="/d(?=abc)/";$str="ab36abc8eg";$res=preg_match($pattern,$str,$match);var_dump($match);//6匹配的6,因为只有它作为一个数字,后面还有abc。
$pattern="/(?<=abc)d/";$str="ab36abc8eg";$res=preg_match($pattern,$str,$match);var_dump($match);//8匹配的8,因为只有它作为一个数字,后面还有abc。