不幸的是,这个看似简单的任务在 notepad++ 中几乎是不可能完成的。您必须构建的正则表达式将是......可怕的。这甚至可能是不可能的,但如果是的话,那就不值得了。我几乎可以保证。
然而,一切都没有丢失。还有其他工具更适合这个问题。
您真正想要的是一个可以搜索输入文件并打印出正则表达式匹配列表的工具。UNIX 实用程序“grep”就可以做到这一点。不要害怕,因为它是一个 UNIX 实用程序:您可以在 Windows 上获得它:
http://gnuwin32.sourceforge.net/packages/grep.htm
您要使用的 grep 命令行是这样的:
grep -o 'http:\/\/www.[a-zA-Z0-9./-]\+\?' <filename(s)>
(您要在其中搜索 URL 的文件的名称在哪里<filename(s)>
。)
您可能也想稍微改变一下您的正则表达式。我在该正则表达式中看到的问题是它无法处理没有“www”子域的 URL,并且它不会处理安全链接(以 开头https
)。也许这就是你想要的,但如果不是,我会这样修改它:
grep -o 'https\?:\/\/[a-zA-Z0-9./-]\+\?' <filename(s)>
以下是关于这些表达式的一些注意事项:
[
在字符组内,除了and (sometimes)之外,不需要引用元字符-
。我有时会说,因为如果你把破折号放在最后,就像我上面所说的,它不再被解释为范围运算符。
令人讨厌的是,grep 实用程序的语法与大多数正则表达式实现不同,因为我们熟悉的大多数元字符 ( ?
,+
等) 必须转义才能使用,而不是相反。这就是为什么您在上面的?
和+
字符之前看到反斜杠的原因。
最后,这个表达式 ( +
) 中的重复元字符默认是贪婪的,这可能会导致问题。我通过附加 a 使它变得懒惰?
。您制定 URL 匹配的方式可能不会导致问题,但是如果您将匹配更改为,例如,[^ ]
而不是[a-zA-Z0-9./-]
,您会看到同一行上的 URL 组合在一起。