2011-07-03 226 views
1

我正在尋找一個匹配字符串的正則表達式模式。一個字符串,定義爲引號中的任何內容。我正在試圖做的是分析這些字符串:RegEx模式匹配字符串

PRINT "test" 
PRINT "Hello":PRINT "World" 

我現在的模式是:「\」 * \「」。它解析了第一行。它返回/「test」/,但第二行,它返回/「Hello」:PRINT「World」/這是不正確的。它需要匹配第一個報價和第二個報價之間的內容。它似乎與整行中第一個報價和最後一個報價之間的任何內容相匹配。

任何幫助,將不勝感激。如果有關係,這是.NET Regex。

回答

5
 
"[^"]*" 

.*是貪婪的。它匹配正確的字符串的末尾,因爲沒有任何東西告訴它停在任何介於"之間。 [^"]*也很貪婪 - 但不是那麼隨意。

替代地使用非貪婪匹配

 
".*?" 

還請參閱MSDN on Quantifiers

+0

這種模式像一個魅力。感謝您的幫助和感謝Regex的貪婪/非貪婪規則。 – Icemanind

+0

@ice:不客氣。順便說一句,我認爲@約翰沃爾頓也值得一票。 – Tomalak

+0

同意。我只是upvoted他 – Icemanind

2

你的問題是,正則表達式是由默認的貪婪,這意味着他們會拿起最長匹配的字符串,他們可以..你的正則表達式的非貪婪的版本將是:

"\"[^"]+?\" 

我用+來代替*假設你只想匹配非空字符串。