我正在尝试找到字符前面有空格的单词"the"
" t"在角色之后" e"来自字符串" the the" 。我正在使用正则表达式,但它只给我一个单词"the"
而不是两个单词'the'
。
s="the the the the"
s.scan(/\sthe\s/)
output - [" the "]
我期待表达能够返回两个中间词""。为什么会这样。
答案 0 :(得分:1)
这里的问题是\s
个模式消耗空白。 scan
方法仅匹配非重叠匹配,并且您预期的匹配 重叠。
您需要使用looakrounds来获得重叠匹配:
/(?<=\s)the(?=\s)/
请参阅regex demo和Ruby demo,其中puts s.scan(/(?<=\s)the(?=\s)/)
打印2 the
个实例。
模式详情:
(?<=\s)
- 一个积极的外观,需要在the
the
- 文字the
(?=\s)
- 在the
之后需要空格的正向前瞻。请注意,如果您使用\bthe\b
(即使用单词边界),您将从字符串中获取所有the
个实例\b
只是在单词char之前或之后断言位置(字母,数字或下划线)。