2010-07-28 29 views
0

之間的字符匹配我試圖找到包含<或>之間的文本{}。這是在HTML中,我很難讓它成爲「不真實」。正則表達式,{}

所以我想找到這些字符串匹配的文本:

{test > 3} 
{testing >= 3 : comment} 
{example < 4} 

我已經嘗試了一些正則表達式,但似乎都延續過去收盤},幷包括有<或HTML> 。例如,我想這正則表達式

{.*?(<|>).*?} 

但最終這樣的文本相匹配:

{if true}<b>testing</b>{/if} 

這看起來很簡單,包含<或>之間的任何文本{}。

回答

4

這應該做的伎倆:

{[^}]*(<|>).*} 
+2

我增加了投票數,但是您確實需要使。*匹配懶惰或用另一個[^}] *替換它以避免貪婪問題,如果將有多個集相同的行 – 2010-07-28 15:18:33

+0

你需要非常規的修飾符,否則第一個字符類會吞噬一切,直到第一個'}'字符... – ircmaxell 2010-07-28 15:18:59

+0

剛剛添加了?之後。*使其變得貪婪,並且它可以在同一行上的多個匹配中正常工作。 – 2010-07-28 15:48:47

0
{[^}]*?(<|>)[^{]*?} 

嘗試。請注意,我用一個字符類替換了.,這意味着除了左/右花括號之外的所有內容。

0

您是否嘗試過使用Ungreedy(U)開關?

1

甚至更​​有效的正則表達式(因爲沒有非貪婪匹配):

'#{[^}<>]*[<>]+[^}]*}#' 

的原因有沒有在第三字符類括號是以便它匹配的字符串與多於一個> (如{foo <> bar} ...