【问题标题】:RegExp: want to find all links that do not end in ".html"RegExp:想要查找所有不以“.html”结尾的链接
【发布时间】:2010-03-25 11:07:34
【问题描述】:

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

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

在我的编辑器 Notepad++ 中,href=\"([^"]*)\" 查找所有链接(包括以“html”结尾的链接和不以“html”结尾的链接)。 为什么消极的后视不起作用?

我也尝试过前瞻:

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

但这也没用。

有人可以帮忙吗?

干杯,卑躬屈膝

【问题讨论】:

  • 我认为 Notepad++ 只是不支持后向断言。
  • 尝试让正则表达式与 Notepad++ 一起工作真是太难看了。我放弃了,有这么多烦人的限制。

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


【解决方案1】:

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

您可以在以下位置找到 notepad++ 正则表达式引擎的文档:http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions

【讨论】:

  • 文档令人困惑,因为它有一个关于环视的部分,这似乎表明它们是受支持的。
【解决方案2】:

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

更多信息请看这里http://www.scintilla.org/SciTERegEx.html


原答案

^.*(?&lt;!\.html)$

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      非常感谢大家。

      最后正则表达式确实没有用。

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

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

      还是谢谢你,卑躬屈膝

      【讨论】:

        【解决方案5】:

        请注意,Notepad++(现在?)支持 assertions 就像这样。 (我有 Notepad++ 6.3,日期为 2012 年 2 月 3 日。)

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

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

        【讨论】:

          猜你喜欢
          • 2019-09-27
          • 2013-12-24
          • 2014-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-26
          • 2021-01-14
          相关资源
          最近更新 更多