如何在Emacs中regexp搜索=,但不是> =,==,< =,!=,〜=等等?

时间:2016-06-21 16:59:11

标签: regex emacs

我想在正则表达式中搜索=字符,该字符可能在两边都有空格,也可能在一行的开头或结尾处。我试过几个:

  • =不起作用,因为它与==>=等匹配。
  • [^<>=]=[^<>=]不起作用,因为它会在=字符之前和之后立即捕获两个字符,这是不合需要的
  • 我认为\_<\_>可能有用,但我无法弄清楚这些是什么

在Vim中,有\zs\ze表示匹配的开始和结束,因此我只能针对上下文匹配周围的字符。但是Emacs没有这些。

这可以用Emacs吗?

1 个答案:

答案 0 :(得分:2)

您的问题未明确。在=之前和之后你不允许使用哪些角色?你允许空间字符(其他空格怎么样?)。但是你允许空格字符(或空格)吗?

例如,您允许a=b匹配吗?如果是这样,那么也许不允许写信?

=之前和之后立即明确指定允许和禁止的字符时,可以编写正则表达式。但是既然你想&#34;捕获&#34;只有匹配上下文中的=,您需要为=使用正则表达式组,并在匹配所有内容后仅检索匹配的内容。

例如,[ ]*=[ ]*匹配可能被空格字符包围的=。但是,如果您只想在该上下文中捕获=,则需要使用[ ]*\\(=\\)[ ]*,然后使用(match-string 1)获取=

您也不会说您是在匹配缓冲区还是字符串中的文本。

并且您不想说是否要以交互方式或Lisp程序进行此操作。

您需要的确切代码取决于这些内容。如果以交互方式(例如,搜索),您不需要加倍反斜杠。如果是字符串而不是缓冲区,则需要将字符串作为第二个参数传递给match-string

一般来说,你的问题是不明确的,答案涉及指定这些事情 - 特别是,你想要匹配的内容(=之前和之后允许哪些字符)以及哪些部分是什么?您要检索的匹配上下文(仅==加上之前和之后的一些字符。)