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

标签 regex pcre

我有以下副本示例,我希望使用正则表达式在 Sublime 中进行查找和替换。但是我无法弄清楚如何选择除特定 URL 之外的所有 URL。我知道如果我知道 url 是什么,我可以很容易地做到这一点,但是我知道的唯一 URL 是我不想用 anchor 标记替换的 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 标记包围,但其中包含 flowers.com.au 的 URL 除外!

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

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

我也试过

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

非常感谢任何帮助。

最佳答案

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

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

您可以将正则表达式与否定前瞻结合使用来检查右侧的内容是否不包含 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,.#]+

关于正则表达式选择除特定 URL 之外的文本正文中的所有 URL(Sublime Text),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53586774/

相关文章:

Python 3 : How can I get os. getcwd() 与 re.sub() 配合得很好吗?

javascript - 无法使用正则表达式替换()

c++ - 获取同级别的标签?

c++ - PCRE多行匹配问题

php - 我如何判断给定的字符串是否是 PHP 的 preg_match 的有效输入?

regex - 去除单个字母之间的空格

python - Scrapy:ValueError:需要超过 0 个值才能解压

php - 如何将PHP的eregi改成preg_match

c - 在 C 中只使用一个大的正则表达式

php - 如何正则表达式匹配一串数字和连字符,但不以连字符开头或结尾?