我正在寻找一种正则表达式来添加"对于这两行:
href=show0a93.html?r=c401>
href=show8c5a.html?r=c402>
这样就会变成:
href="show0a93.html?r=c401">
href="show8c5a.html?r=c402">
使用"显示更容易替换显示,但问题是这两个样本:r = c401和r = c402,它集成了各种数字。
我搜索了很多,但这对我来说似乎太难了。
我试过[搜索]:
/^r=c[\d]>$/
和[替换]:
/^r=c[\d]">$/
还有很多其他的东西......
答案 0 :(得分:0)
<强>替换强>
(?<=href=)([^>]+)(?=>)
。通过强>
"\1"
<强>解释强>
(?<= (?# start lookbehind)
href= (?# match href= literally)
) (?# end lookbehind)
( (?# start capturing group)
[^>]+ (?# match 1+ URL characters, everything until >)
) (?# end capturing group)
(?= (?# start lookahead)
> (?# match > literally)
) (?# end lookahead)
lookarounds会在URL之前和之后找到表达式,但不会在最终匹配中包含它们(因此我们无需担心替换它们)。然后,我们capture实际的网址,除了>
(意味着带有>
的网址,应该进行编码)之外的任何网址都会失败。最后,我们将匹配(只是网址)替换为"\1"
,其中\1
引用整个网址。
<强> PHP:强>
$string = '<a href=show0a93.html?r=c401>';
$string = preg_replace('/(?<=href=)([^>]+)(?=>)/', '"\1"', $string);
echo $string;
// <a href="show0a93.html?r=c401">
演示: Regex101
<强>更新强>
文本编辑器可能不支持使用less-elegant replacement (demo)完成此操作的外观:
href=([^>]+)>
href="\1">
我不打算详细解释,我只是删除了这些结果,这意味着href=
和>
现在是比赛的一部分。意味着我们需要包含它们当我们更换所有东西时。