正则表达式 - 搜索然后在具有各种数字的句子中添加特殊字符

时间:2014-05-13 15:48:25

标签: regex

我正在寻找一种正则表达式来添加"对于这两行:

    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]">$/

还有很多其他的东西......

1 个答案:

答案 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=>现在是比赛的一部分。意味着我们需要包含它们当我们更换所有东西时。