这就是我的代码的样子:
$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上它有点不同。
答案 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
代替(.*?)
来使你的正则表达式懒惰 - 它应尽可能匹配一个字符串短(即停在它找到的第一个"
而不是最后一个)