正则表达式选择文本主体中除特定URL(崇高文本)以外的所有URL

时间:2018-12-03 02:43:31

标签: regex pcre

我有以下复制示例,希望使用Regex在Sublime中进行查找和替换。但是我不知道如何选择除特定URL之外的所有URL。我知道,如果我知道url是什么,就可以很容易地做到这一点,但是我唯一知道的URL是我不想用锚标记替换的URL。

复制示例:

  

这是 example.com.au ,这是 exampleflowers.com.au 和   设置另一个 anotherexample.com.au/terms.html 网址。不好了    exampleflowers.com.au 再次在此句子中。

除了要在其中包含flowers.com.au的URL之外,我希望所有URL都由href标记包围!

我目前用于测试URL的简单正则表达式是:

    /\w+(\.[^\s,\.^#]+)+/gi

我也尝试过

    /\w+(?!flowers)(\.[^\s,\.^#]+)+/gi

任何帮助深表感谢。

1 个答案:

答案 0 :(得分:1)

您的正则表达式将匹配1个以上的单词字符\w+,然后将捕获组(\.[^\s,\.^#]+)+本身匹配一个点并重复1次以上,并将其重复字符类中的1次以上。

如果(?!flowers)不在右边,则负前行flowers将在匹配1个以上的单词字符的末尾进行检查,这是正确的,因为它已经匹配了包括花在内的所有单词字符。 / p>

您可以将正则表达式与否定前瞻结合使用,以检查右侧的内容是否不包含flowers.com.au

查找

(?<!\S)(?!\S*flowers\.com\.au)(\w+(?:\.[^\s,.#]+)+)

替换

<a href="$1">$1</a>

说明

  • (?<!\S)后面的否定断言来断言左侧的字符不是非空格字符
  • (?!\S*flowers\.com\.au)断言右边的否定断言不是0+乘以flowers.com.au后跟一个非空白字符
  • (\w+(?:\.[^\s,.#]+)+)在捕获组中使用您的正则表达式,并在替换组中使用它

Regex demo

请注意,您否定的字符类[^\s,\.^#]可以写为[^\s,.#]+