我想在正则表达式中搜索=
字符,该字符可能在两边都有空格,也可能在一行的开头或结尾处。我试过几个:
=
不起作用,因为它与==
,>=
等匹配。[^<>=]=[^<>=]
不起作用,因为它会在=
字符之前和之后立即捕获两个字符,这是不合需要的\_<
和\_>
可能有用,但我无法弄清楚这些是什么在Vim中,有\zs
和\ze
表示匹配的开始和结束,因此我只能针对上下文匹配周围的字符。但是Emacs没有这些。
这可以用Emacs吗?
答案 0 :(得分:2)
您的问题未明确。在=
之前和之后你不允许使用哪些角色?你允许空间字符(其他空格怎么样?)。但是你允许仅空格字符(或空格)吗?
例如,您允许a=b
匹配吗?如果是这样,那么也许不允许写信?
在=
之前和之后立即明确指定允许和禁止的字符时,可以编写正则表达式。但是既然你想&#34;捕获&#34;只有匹配上下文中的=
,您需要为=
使用正则表达式组,并在匹配所有内容后仅检索匹配的内容。
例如,[ ]*=[ ]*
匹配可能被空格字符包围的=
。但是,如果您只想在该上下文中捕获=
,则需要使用[ ]*\\(=\\)[ ]*
,然后使用(match-string 1)
获取=
。
您也不会说您是在匹配缓冲区还是字符串中的文本。
并且您不想说是否要以交互方式或Lisp程序进行此操作。
您需要的确切代码取决于这些内容。如果以交互方式(例如,搜索),您不需要加倍反斜杠。如果是字符串而不是缓冲区,则需要将字符串作为第二个参数传递给match-string
。
一般来说,你的问题是不明确的,答案涉及指定这些事情 - 特别是,你想要匹配的内容(=
之前和之后允许哪些字符)以及哪些部分是什么?您要检索的匹配上下文(仅=
或=
加上之前和之后的一些字符。)