【问题标题】:regex for matching where parts of string are not same用于匹配字符串部分不同的正则表达式
【发布时间】:2011-07-11 13:41:07
【问题描述】:

我有类似的东西

stuff(123)=stuff(123)
stuff(23434)=stuff(234324)

我想匹配所有右手边和左手边不同的实例。

我有这个,但它似乎不起作用:

\\(stuff([0-9]+)\\)=[^\\1]

另外,我正在尝试使用 emacs 正则表达式搜索来做到这一点。

【问题讨论】:

  • 找到它们后你会怎么做?有很多方法可以解决您的问题,但“这取决于。”
  • @scottfrazer 他们不匹配的实例很有趣。字符串的 rhs 端有更多内容需要人工分析,以防它们不匹配。

标签: regex emacs


【解决方案1】:

根据您对我的评论的回答,我会使用flush-lines

M-x flush-lines RET \(stuff([0-9]+)\)=\1 RET

请注意,您只能在小提示符处使用单个反斜杠

【讨论】:

    【解决方案2】:

    if(false==foo.match(/(stuff\([0-9]+\))=\1/) 是您想要的那种东西。取决于您的正则表达式方言。你不能[^\\1][] 是一个字符类

    您可能想研究零宽度断言。同样,这取决于您的方言。

    【讨论】:

    • 我不认为 emacs 正则表达式需要 \1。
    • @Jingshao Chen \1 在 emacs 中确实有效,我在 query-replace-regex 中使用过
    • @anio 是的。你说的对。 Emacs 确实支持\n。我认为主要问题是没有一个班轮可以做正则表达式的逻辑非。您可能必须编写一个函数来执行该逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2012-11-25
    • 2015-10-25
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多