2017-03-16 142 views
2

這是我的文字:如何找到匹配所有部分的所有正則表達式匹配?

hello foo-1 hello bar $4 hello ... 

我需要找到匹配/hello .*/一切:

["hello foo-1", "hello bar $4", ...] 

什麼是正則表達式來喂scan()爲了實現這一目標?

+1

'你好\ S + * |'https://regex101.com/r/OCbf83/1 –

+0

@AvinashRaj,請做出回答。?(=你好$?)。 –

回答

3

使用split與前瞻基於正則表達式:

'hello foo-1 hello bar $4 hello'.split(/(?=hello)/) 

(?=hello)積極前瞻將在位置中的每個hello前面的字符串分割字符串。

如果您需要擺脫尾隨空白(如果有的話)在模式開始添加\s*的:

.split(/\s*(?=hello)/) 

Rubular demoonline Ruby code demo

+0

我正要用'scan'解決方案進行編輯 - ['s.scan(/ hello(?:(?!hello)。)*/m)'](https://ideone.com/EdxdrH),但我仍然相信「分裂」是正確的。 –

+0

這不會區分「hello」和「helloween」。它也不允許字符串以「hello」以外的任何字符開頭(例如「say hello ...」)。除了這個例子之外,OP對這種可能性是無聲的,但是在使用'scan'時這不會成爲問題。 –

+0

@Cary添加單詞邊界不是火箭科學。我們的解決方案足夠靈活,可以適應任何進一步的需求 –

0

這是沒有正則表達式的替代方案。它採用slice_before

"hello foo-1 hello bar $4 hello".split.slice_before("hello").map{|words| words.join(' ')} 
# => ["hello foo-1", "hello bar $4", "hello"] 
"hello helloween hello halloween".split.slice_before("hello").map{|words| words.join(' ')} 
# => ["hello helloween", "hello halloween"] 
+0

我上面的評論也適用於此處。 –

+0

@CarySwoveland我不確定它的確如此:''hello helloween hello halloween「.split.slice_before(」hello「)。map {| words | words.join('')}''''「hello helloween」,「hello halloween」]' –

+0

@CarySwoveland:至於「打個招呼」,這是任何分隔符的問題。你需要以某種方式逃避它。 –

相關問題