我是正则表达式的相对新手(尽管我已成功使用它们多次)。 我想查找文档中所有不以“.html”结尾的链接 我想出的正则表达式是:
href=\"([^"]*)(?<!html)\"
在Notepad ++中,我的编辑器href=\"([^"]*)\"
找到所有链接(以“html”结尾的链接和不以“html”结尾的链接)。
为什么不负面的背后工作?
我也尝试过前瞻:
href=\"[^"]*(?!html\")
但这也不起作用。
有人可以帮忙吗?
干杯,grovel
答案 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
)