2015-06-18 32 views
1

我試圖找到LaTeX中不在數學模式內的所有不正確編寫的命令。也就是說,在下面,我想匹配「\壞」,但不是「\好\」或「\數學」。搜索(LaTeX)正則表達式發現不在另一個正則表達式(數學模式)

Example of \bad command. Example of \good\ command. And $x=\math + y$ is also a good command. 

我想通了,如何搭配的數學模式,開始與非轉義美元符號「$」結尾 - 我基本上要反轉這場比賽莫名其妙:

(?<!\\)\$.+?[^\\]\$ 

我想通如何匹配「\壞」,而不是「\好\」(注意+後面的空格):

\\[A-Za-z]+ 

但我無法弄清楚如何將兩者結合起來。我試過了(負面)的看法,似乎沒有得到任何地方(不是每個段落都必須包含數學模式)。任何建議/提示?提前致謝!

編輯:

  1. 我使用Perl兼容的正則表達式(卓異文本3,要準確)。
  2. 「壞」命令是數學模式內的宏,後面是空格。一個「好」的命令是一個宏,其次是任何其他的 - 標點符號或反斜槓 - 或數學模式內的任何宏。
+0

你必須:1.說出你正在使用的語言/正則表達式的風格,2.解釋如何從糟糕的命令中講出一個好命令(因爲不是每個人對於正則表達式和乳膠都熟悉)。 –

+0

因此,數學模式以外的宏是「壞」? –

回答

0

Sublime Text使用Boost庫來處理正則表達式,因此它不完全兼容Perl。

真正的Perl兼容的答案是:

\$.*?\$(*SKIP)(*FAIL)|\\\w+(?=\s) 

Demo

但你不能用升壓使用(*SKIP)(*FAIL)伎倆,不幸的是(直到this feature request得到實現)。

您可以解決這個莫名其妙地像:

\$.*?\$\K|\\\w+(?(?=\s)|\K) 

Demo

這種方法的問題是,「壞」命令和數學模式結束標記將仍然產生空(零長度)匹配(感謝\K)。我不知道這對你是否足夠好。

+0

這將是理想的,如果它不匹配零長度,所以我可以只使用Sublime Text。但我總是可以使用Perl本身來測試這些,這很好!非常感謝,這是非常有益的,愛演示!我不知道(* SKIP)或(* FAIL),並且\ K迴避了我的記憶。 – cwotta

+0

樂於助人。如果你想了解更多關於'(* SKIP)(* FAIL)'的信息,你可以閱讀[深入解釋](http://www.rexegg.com/regex-best-trick.html)。 –

+0

偉大的文章(我讀了整件事)!我有一個精美的Perl腳本。再次感謝 – cwotta