如何找到匹配所有部分的所有正则表达式匹配?

时间:2017-03-16 10:30:23

标签: ruby regex

这是我的文字:

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

我需要找到与/hello .*/匹配的所有内容:

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

要实现此目的,要提供给scan()的正则表达式是什么?

2 个答案:

答案 0 :(得分:3)

使用基于前瞻性正则表达式的split

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

(?=hello)正向前瞻会将字符串拆分为字符串中每个hello前面的位置。

如果您需要摆脱尾随空格(如果有的话),请在模式开始处添加\s*

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

请参阅Rubular demoonline Ruby code demo

答案 1 :(得分: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"]