RegExp:想要找到所有不以“.html”结尾的链接

时间:2010-03-25 11:07:34

标签: regex notepad++ negative-lookbehind negative-lookahead

我是正则表达式的相对新手(尽管我已成功使用它们多次)。 我想查找文档中所有不以“.html”结尾的链接 我想出的正则表达式是:

href=\"([^"]*)(?<!html)\"

在Notepad ++中,我的编辑器href=\"([^"]*)\"找到所有链接(以“html”结尾的链接和不以“html”结尾的链接)。 为什么不负面的背后工作?

我也尝试过前瞻:

href=\"[^"]*(?!html\")

但这也不起作用。

有人可以帮忙吗?

干杯,grovel

5 个答案:

答案 0 :(得分:8)

如果使用PERL或PCRE(例如PHP中的preg_match),那么正则表达式可以正常工作。但是,大多数人都不支持前瞻和后瞻断言,特别是更简单的正则表达式引擎,就像Notepad ++使用的那样。几乎所有正则表达式引擎都只支持最基本的语法,如量词,子模式和字符类。

您可以在http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions

找到notepad ++正则表达式引擎的文档

答案 1 :(得分:1)

编辑:Notepad ++使用SciTE正则表达式引擎,它不支持环顾表达式。

有关详细信息,请查看http://www.scintilla.org/SciTERegEx.html


原始答案

^.*(?<!\.html)$

答案 2 :(得分:1)

你可以创建一个正则表达式,但它可能太复杂了:

href=\"((([^"]*)([^h"][^"][^"][^"]|[^t"][^"][^"]|[^m"][^"]|[^l]))|([^"]|)([^"]|)([^"]|))\"

答案 3 :(得分:0)

非常感谢你。

最后,正则表达确实不起作用。

我只是使用了一种解决方法,并用自己+“。html”替换了所有链接,然后用“.html”替换了所有出现的“.html.html”。

所以我将href=\"([^"]*)\"替换为href="\1.html",然后.html.html替换为.html

非常感谢,grovel

答案 4 :(得分:0)

请注意,Notepad ++(现在?)支持这样的assertions。 (我有Notepad ++ 6。3,2012年2月3日。)

我相信Regular Expressions documentation暗示两个替换变体都使用相同的PCRE方言:

  • 标准:Search | Replace(默认快捷方式Ctrl H
  • 插件:TextFX | TextFX Quick | Find/Replace(默认快捷方式Ctrl R