正则表达式 select 正文中除特定 URL 之外的所有 URL (Sublime Text)

Regex to select all URLs in a body of text except a particular URL (Sublime Text)

我有以下副本示例,我希望使用正则表达式在 Sublime 中进行查找和替换。但是我不知道如何 select 所有 URL 除了一个特定的。我知道如果我知道 url 是什么,我可以很容易地做到这一点,但是我知道的唯一 URL 是我不想用锚标记替换的那个。

复制示例:

this is example.com.au and this is exampleflowers.com.au and of course another anotherexample.com.au/terms.html, url. Oh no exampleflowers.com.au is in this sentence again.

最终我希望任何 URL 都被 href 标签包围,但 URL 除外,其中包含 flowers.com.au!

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

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

我也试过了

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

非常感谢任何帮助。

你的正则表达式将匹配 1+ 个单词字符 \w+ 然后重复 1+ 次捕获组 (\.[^\s,\.^#]+)+ 本身将匹配一个点和 1+ 次字符中的内容 class.

否定前瞻 (?!flowers) 将在匹配 1+ 个单词字符的末尾检查 flowers 是否不在右侧,因为它已经匹配了所有单词字符,包括花.

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

查找

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

替换

<a href=""></a>

说明

  • (?<!\S) 断言左边的内容不是非空白字符的否定回顾
  • (?!\S*flowers\.com\.au) 否定先行断言右边的内容不是 0+ 次非空白字符后跟 flowers.com.au
  • (\w+(?:\.[^\s,.#]+)+) 在捕获组中使用正则表达式并在替换中使用它

Regex demo

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