【发布时间】:2013-07-17 19:32:19
【问题描述】:
<?php
$str = '123.456.789.987,654,321,';
// preg_match_all('((?<grp1>\d{3})\.|(?<grp2>\d{3})\,)', $str, $matches);
preg_match_all('((?<grp1>\d{3})\.|(?<grp1>\d{3})\,)', $str, $matches);
print_r($matches);
?>
根据上面的代码,我想将所有字符串作为一个名为grp1 的组数组获取,但它总是变成错误PHP Warning: preg_match_all(): Compilation failed: two named subpatterns have the same name at offset ...。如果我将其中一个组名更改为grp2,效果会很好。
是否可以在 preg_match_all 中使用 1 个组名而不是不同的组名?
更新
我不能使用 /(?<grp1>\d{3})[.,]/ 这样的东西是有原因的,这是一个解决问题的示例:
<?php
$str = '
src="img1.png"
src="img2.jpg"
url(img3.png)
url(img4.jpg)
';
preg_match_all('/src=\"(?<img1>(\w+)(.png|.jpg))\"|url\((?<img2>(\w+)(.png|.jpg))\)/', $str, $matches);
print_r($matches);
?>
我想将所有img1.png、img2.jpg、img3.png 和img4.jpg 放入名为img 的数组组中,如下所示:
[img] => Array
(
[0] => img1.png
[1] => img2.jpg
[2] => img3.png
[3] => img4.jpg
)
【问题讨论】:
标签: php regex preg-match-all