2013-08-24 12 views
7

我正在用乳膠寫紙,不小心寫了\cite[]而不是\cite{}。 我可以通過手工檢查整個文檔,但我想知道如何使用正則表達式在記事本++中執行此操作。如何在記事本++中執行非貪婪的正則表達式查詢?

我最初試圖\\cite\[(.*)\]\cite{\1}這適用於簡單的情況下,如

\cite[hello world] blah blah 

但是如果在它匹配所有的人的一段兩個或兩個以上引文更換。 因此,例如

\cite[aaa]\cite[bbb] something here \cite[ccc] 

整條生產線相匹配

我怎樣才能得到一個非貪婪的匹配,使上述線路將被匹配爲3場獨立的比賽 和替換命令的結果應該給我

\cite{aaa}\cite{bbb} something here \cite{ccc} 
+0

更好地使用更精確的表達式。而不是使用'\ [。* \]'或:'\ [。*?\]',使用:\ [[^ [\]] * \]'會更有效率。 _說說你的意思,是說你說什麼!_ – ridgerunner

回答

19

使用不願(又名非貪婪)表達:

\\cite\[(.*?)\] 

問號的添加將.*從貪婪(默認)更改爲不情願(非貪婪),這意味着它會盡可能少地消耗以找到匹配,這意味着它不會跳過多個如果第一個引用和最後一個引用的方括號相同,則使用空格方括號進行搜索。

請參閱此正則表達式的live demo使用問題中的示例。

+0

這是正確的答案。 – chowey

+0

不幸的是,這並不適合我。我在記事本++中粘貼了我在問題中寫的樣本行,然後使用了你的正則表達式,它不匹配任何東西。 – twerdster

+0

我添加了顯示正則表達式作品的鏈接。也許檢查一下,讓我知道你認爲你遇到的問題是。當你使用它時,注意不要在正則表達式的末尾放置任何空格 - 我注意到當我複製時粘貼它來測試它,我拾起了一些尾部空格,從而使它停止正常工作。 – Bohemian

1

更好地使用更多的precises表達擺在首位:

\\cite\[([^[\]]*)\]

您必須使用記事本+ + 6或更高版本(它們升級到PCRE正則表達式引擎的V6)。