【问题标题】:Notepad++ use both regular expressions and extended searchNotepad++ 同时使用正则表达式和扩展搜索
【发布时间】:2014-09-25 04:04:14
【问题描述】:

我需要找到所有不在字母 M 前面的\r\n
看来我不能这样做:

\r\n[^M]

我只能在选择扩展搜索的情况下执行\r\n 或在选择正则表达式的情况下执行[^M];但不在一起。

【问题讨论】:

  • Notepad++ 对正则表达式的支持非常差。请改用其他工具(例如 grep,它也有适用于 Windows 的版本,或其他文本编辑器)。
  • @Cameron:我们不要进入宗教辩论,因为我对 NP++ 以外的工具没有任何问题;但根据谁,引用的来源等等? NP++ 实际上非常有能力满足 OP 的需求。
  • @J0e3gan:对不起,我并不是要贬低 Notepad++。我自己每天都用它。只是我很久以前就放弃了它的正则表达式功能:-)
  • @Cameron Notepad++ 具有广泛的正则表达式功能,也许您正在考虑一个旧的和 pre-PCRE 版本。通过stackoverflow.com/questions/11389466/… 查看其正则表达式文档
  • @AdrianHHH:啊哈,这就解释了。我从未尝试过 6.0+ 版本(不知道它存在!)。感谢您的提示。

标签: regex notepad++ regex-negation regex-lookarounds


【解决方案1】:

你应该改用这个正则表达式:

\R(?!M)

说明:

  • \R 任何 Unicode 换行序列。
  • (?!M) Negative Lookahead:断言“M”无法匹配。

【讨论】:

    【解决方案2】:

    \r\n 在“查找”选项卡中选中 正则表达式 时也是有效的 - 即不仅仅是选中了 Extended:为什么不直接使用 \r\n[^M]正则表达式检查了吗?

    给定以下测试文本...

    whatever
    M
    whatever
    G
    foo
    

    ...,\r\n[^M] 产生以下预期结果...

    Search "\r\n[^M]" (3 hits in 1 file)
      new  2 (3 hits)
        Line 2: M
        Line 3: whatever
        Line 4: G
    

    ...,匹配当然是在匹配行的末尾。

    【讨论】:

    • @Cameron:根据我的经验,这是一个常见的误解 - ExtendedRegular expression 在 NP++ 查找/替换中是相互排斥的:它们不是因为 Regular expression 也支持 Extended 涵盖的内容。我只是将 Extended 视为“Regex lite”。
    猜你喜欢
    • 2013-11-30
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2020-02-02
    • 2019-01-27
    相关资源
    最近更新 更多