2013-01-15 56 views

回答

3

http://www.regular-expressions.info/repeat.html Chekout取代的圖案出現的所有副本。

貪婪是指時代的正則表達式引擎將嘗試匹配特定的字符的數量。陳述一個正則表達式的表達式「貪婪」的方法是使用特殊的字符*+?{}

考慮

str = "asdfasdfbbbb" 
r1 = /b/ 
r2 = /(asdf)*/ 
r3 = /b{3}/ 
r4 = /.*/ 

匹配來海峽這些正則表達式會導致:

R1匹配「asdfasdf b BBB」(非貪婪,試圖匹配b只是一次)
r2匹配asdfasdf BBBB」(貪婪,嘗試匹配ASDF多次越好)
R3匹配「asdfasdf BBB B」(非貪婪,匹配b恰好3次)​​
R4匹配asdfasdfbbbb(ULTRA-貪婪,多次匹配幾乎任何字符儘可能)

由於正則表達式是表示特定文本模式的手段,它不像貪婪這是一個方法問題。您有時需要匹配三次foo/(foo){3}/)或無限次bar/(bar)*/)。

+0

'+ 1'給你優秀的解釋。非常感謝你! :) – DoLoveSky

2
  • * - (0或更多)貪婪匹配
  • + - (1或多個)貪婪匹配
  • *? - (0或更多)非gree DY匹配
  • +? - (1或多個)非貪婪匹配
+1

我沒有明白你的觀點?你能解釋一下你的答案嗎? – DoLoveSky

+0

是否有任何特定情況 - 何時選擇「貪婪」或「非貪婪」方法? – DoLoveSky

+0

欲瞭解更多關於紅寶石正則表達式的信息,請參閱http://ruby.bastardsbook.com/chapters/regexes/ –

7

在貪婪方法正則表達式模式往往在源string.For例如消耗最大字符

textstr = "bcabdcab" 
textstr.gsub!(/(.*)ab/, "xxx") 
# this will match whole `bcabdcab` and return `xxx` 

這裏*是一個貪婪量詞。在非貪婪方法中,正則表達式引擎在滿足匹配標準時返回。使量詞非貪婪追加?

textstr = "bcabdcab" 
textstr.gsub!(/(.*?)ab/, "xxx") 
# this will match only `bcab` part and return `xxxdcab` 

gsub返回STR(第一自變量)的與用於第二參數

+0

對你的解釋和興趣在我的文章中加上'+ 1'! – DoLoveSky

+0

如果'gsub'函數要取代所有出現的模式,第二個應該返回'xxxxxx'。 – Haven