preg_replace itereation

时间:2016-06-21 16:18:28

标签: php regex

这就是我的代码的样子:

$x = '<p>This is a <a href="1.php?src=123">first</a> paragraph.</p>
<p>This is a <a href="2.php?id=987">second</a> pararaph.</p>
<p>This is a <a href="3.php?reL=666">third</a> paragraph'</p>;

我想替换所有这些链接并添加一个数字。一些迭代。在第一个链接中,它应添加&i=1,第二个&i=2,第三个&i=3,第四个&i=4等。

修改:我尝试匹配所有a代码并将其转到数组:

$input = '<p><a href="1.php?src=123">x</a></p> <p><a href="2.php?id=987">y</a></p> <p><a href="3.php?rel=666">third</a></p>';
$output = [];
preg_match("/href=\"(.*)\"/", $input, $output);
print_r($output);

然而,它返回一个包含两个元素的数组,并且在phpliveregex.com上它有点不同。

1 个答案:

答案 0 :(得分:2)

你快到了。

$input = '<p><a href="1.php?src=123">x</a></p> <p><a href="2.php?id=987">y</a></p> <p><a href="3.php?rel=666">third</a></p>';
$output = [];
preg_match_all("/href=\"(.*?)\"/", $input, $output);
print_r($output);

有两个问题:

  • preg_match仅匹配第一次出现;使用preg_match_all代替
  • 通过添加问号(.*?)来使你的正则表达式懒惰 - 它应尽可能匹配一个字符串短(即停在它找到的第一个"而不是最后一个)