2012-07-05 34 views
0

我需要從一個字符串\begin{?}\end{?}其中?是任何數目的字母數字或字符*所以它必須例如\begin{align}\end{align*}匹配相匹配。正則表達式爲 {開始?}和 {結束?}

我試圖做到這一點,但我不知道什麼是錯的

^\\begin{[^}]*}$ 

開始\begin{,以下anything that's not }多次,密切與}

同樣的事情是與\end{?},但我希望它在單個正則表達式中如果可能的話。

+0

嵌套怎麼樣?如果你關心嵌套(例如'\ begin {foo} \ begin {foo} \ end {foo} \ end {foo}',那麼正則表達式明顯不是最優的。如果你不關心嵌套,它仍然可能是不理想的,但它會更合理 –

+0

是的,有一個嵌套在字符串內,但我用''(無)取代所有這些,所以我猜這不應該是一個問題...或? – svenkapudija

回答

3

我覺得下面的正則表達式就是你需要的。

\\(begin|end){[a-zA-Z0-9*]+}

+0

出現了額外的要求 - 如果有另一個'{SOMETHING}'(花括號)在第一個之後它也應該匹配,所以'\ begin {array}'應該與'\ begin {array} {ll}'相匹配 - 所以第二個花括號是可選的? – svenkapudija

0

{}是用於表示重複的特殊字符,因此您還需要將其轉義。

^\\begin\{[^}]*\}$ 
+0

沒有必要在字符類內跳過''大括號',這是誤導性的 – Cylian

+0

糟糕,我的錯誤糾正了它,外面的那些仍然需要逃脫 – Eelke

3

你的正則表達式:

\\(begin|end){.*?}

.*將抓住{ }之間的任何東西,而當第一}而來的?手段將停止。

+0

正如我從問題中所理解的那樣,要求只適用於括號內的字母數字字符或'*' l匹配任何字符 –

+0

好拿起,我的壞。 @VamanKulkarni完美無瑕。 – jared

相關問題