2016-06-21 42 views
0

我想對=字符進行正則表達式搜索,它可能在兩邊都有空格,也可能不在空格的兩邊,也可能在一行的開始或結尾。我試過一對夫婦:如何在Emacs中正則表達式搜索=,但不是> =,==,<=,!=,〜=等等?

  • =不起作用,因爲它匹配==>=
  • [^<>=]=[^<>=]不起作用,因爲它之前抓住了兩個字符和=字符後,這是不可取的
  • 我想\_<\_>可能是有用的,但我想不出這是什麼意思爲

在Vim中,有\zs\ze,它們表示匹配的開始和結束,以便我可以僅針對上下文匹配周圍的字符。但Emacs沒有這些。

Emacs有可能嗎?

+0

Emacs中有可能的東西。 這不適合你?:'[^ <> =!〜]?=?[^ =]'。你使用哪個命令進行搜索? – elethan

+0

@elethan甚至可以捕捉超過我想要的*字符。正如我所說,我只想捕獲* = *。 – rityzmon

+0

啊是的,我以前讀過,但現在我明白你的意思了。這聽起來像你需要一個負面的向前看或向後看,我認爲這些不支持在lisp正則表達式。至少這是我記得的,但我會回頭看看它在桌面上。 – elethan

回答

2

您的問題未指定。你在=之前和之後不允許使用哪些字符?你允許空格字符(其他空格呢?)。但是,你允許只有空間字符(或空格)?

例如,你允許a=b匹配嗎?如果是這樣,那麼也許字母不被禁止?

一旦你清楚地指定了你允許並在=之前和之後立即禁止的字符,你可以編寫正則表達式。但是由於您只想在匹配的上下文中「捕獲」=,因此在匹配所有內容之後,您需要使用=的正則表達式組,並只檢索匹配的內容。

例如,[ ]*=[ ]*匹配=可能被空間字符包圍。但是如果您只想在該環境下捕獲=,則需要使用[ ]*\\(=\\)[ ]*,然後使用(match-string 1)獲取=

你也不會說你是在緩衝區還是在字符串中匹配文本。

而你沒有說你是想交互式地執行還是從Lisp程序中執行。

你需要的確切代碼取決於這些東西。如果以交互方式進行搜索,則不需要雙反斜槓。如果字符串而不是緩衝區,則需要將該字符串作爲第二個參數傳遞給match-string

一般來說,你的問題沒有詳細說明,答案包括指定這些東西 - 特別是你想要匹配什麼上下文(在=之前和之後允許的字符)以及匹配上下文的哪些部分你想檢索(只是==加上一些字符之前和之後)。