2012-11-06 25 views
1

我想要搜索引號中的所有短語,然後複製它們。如何複製正則表達式

在Emacs中,我的搜索是這樣的:

M-x replace-regexp <RETURN> "*" <RETURN> $& $& <RETURN>

但它不工作...

回答

5

"*"不匹配報價分隔字符串;它匹配一行中任何(非零)數量的引號。

在正則表達式中,*是修飾符,不是通配符,它​​是文件名模式。這意味着「匹配0或更多以前的模式」,因此"*"是「0或更多引號,後跟引號」 - 即,一行中的任何數量的引號。

「任何」的通常正則表達式是.*,它匹配0個或更多「任何字符」(.)。但是那將包括引號; ".*"將匹配從第一個引號到最後的所有內容,作爲一個大字符串。你想要的是"[^"]*",它與引號相符,後跟任意數量的非引號,後面跟着另一個引號。

此外,匹配的模式是\&,而不是$&。這可能會更好:

M-x replace-regexp <RETURN> "[^"]*" <RETURN> \& \& <RETURN> 
+0

您也可以使用'「。*?」'。當使用'*','+'或'?'修飾符時,問號使得前面的修飾符*非貪婪*,所以'。*?'儘可能匹配*任意字符*該模式。請參閱'C-h i g''(elisp)Regexp Special''RET' – phils

+0

@ mark-reed非常感謝您的回覆。當我在Aquamacs中嘗試你的方法時,我會'在替換文本中無效使用'\'。有什麼想法嗎?再次感謝。 – incandescentman

+0

@PeterSalazar對不起,沒有。它適用於我在Aquamacs這裏:我點擊選項-X,輸入'replace-regexp',按回車鍵,輸入'「[^」] *「',按回車鍵,輸入'\&',按空格,再次鍵入'\&',按回車鍵,並得到一條'替換0次出現'的消息。 –