2009-10-29 96 views
0

讓我們以此爲樣本數據:爲什麼字符串#掃描沒有找到所有的匹配?

text=<<EOF 
#if A==20 
     int b = 20; 
#else 
     int c = 30; 
#endif 

而這種代碼:

puts text.scan(/\#.*?\#/m) 

這是爲什麼只捕獲此:

 
#if A==20 
    int b = 20; 
# 

我期待此相匹配,以及:

 
#else 
    int c = 30; 
# 

我需要修改哪些內容才能捕獲這些內容?我使用/m進行多行匹配,但似乎不起作用。

回答

2

它並不第二部分匹配的,因爲之前的其他「#」已經被消耗掉,因此,所有剩下的IST

else 
    int c = 30; 
# 

不匹配的模式。您可以通過使用先行以匹配第二#不消耗它解決這個問題:

text.scan(/#.*?(?=#)/m) 
-1

.*?找到最短匹配。改爲嘗試.*

+0

如果我不使用'?',我只會得到一個匹配。我希望2. – Geo 2009-10-29 20:00:36

+0

-1因爲沒有在發佈前嘗試答案 – fotanus 2013-03-06 12:14:04

1

#在你的輸入已經被發現的第一子scan匹配。從那裏,它進行掃描的字符串,它是的剩餘部分

else 
     int c = 30; 
#endif 

這當然不包含什麼您正則表達式匹配了。

相關問題