我是正则表达式的新手(尽管我已经成功使用过很多次)。我想查找文档中所有不以“.html”结尾的链接我想出的正则表达式是:
href=\"([^"]*)(?<!html)\"
在我的编辑器 Notepad++ 中,href=\"([^"]*)\"
找到所有链接(以“html”结尾的链接和不以“html”结尾的链接)。为什么消极的lookbehind不起作用?
我也尝试过前瞻:
href=\"[^"]*(?!html\")
但这也没有用。
有人可以帮忙吗?
干杯,卑躬屈膝
我是正则表达式的新手(尽管我已经成功使用过很多次)。我想查找文档中所有不以“.html”结尾的链接我想出的正则表达式是:
href=\"([^"]*)(?<!html)\"
在我的编辑器 Notepad++ 中,href=\"([^"]*)\"
找到所有链接(以“html”结尾的链接和不以“html”结尾的链接)。为什么消极的lookbehind不起作用?
我也尝试过前瞻:
href=\"[^"]*(?!html\")
但这也没有用。
有人可以帮忙吗?
干杯,卑躬屈膝
如果您使用 PERL 或 PCRE(例如 PHP 中的 preg_match),则该正则表达式可以正常工作。但是,大多数不支持前瞻和后瞻断言,尤其是更简单的正则表达式引擎,例如 Notepad++ 使用的引擎。几乎所有的正则表达式引擎只支持最基本的语法,例如量词、子模式和字符类。
您可以在以下位置找到 notepad++ 正则表达式引擎的文档:http: //sourceforge.net/apps/mediawiki/notepad-plus/index.php ?title=Regular_Expressions
编辑:Notepad++ 使用 SciTE 正则表达式引擎,它不支持环视表达式。
欲了解更多信息,请查看这里http://www.scintilla.org/SciTERegEx.html
原始答案
^.*(?<!\.html)$
您可以制作一个正则表达式来完成它,但它可能太复杂了:
href=\"((([^"]*)([^h"][^"][^"][^"]|[^t"][^"][^"]|[^m"][^"]|[^l]))|([^"]|)([^"]|)([^"]|))\"
非常感谢大家。
最后正则表达式确实不起作用。
我只是使用了一种解决方法,并将所有链接替换为它们自己+“.html”,然后将所有出现的“.html.html”替换为“.html”。
所以我替换href=\"([^"]*)\"
为href="\1.html"
,然后.html.html
替换为.html
无论如何,谢谢,卑躬屈膝