Ruby正则表达式:无法从字符串中查找单词

时间:2016-08-26 09:36:52

标签: ruby regex

我正在尝试找到字符前面有空格的单词"the"" t"在角色之后" e"来自字符串" the the" 。我正在使用正则表达式,但它只给我一个单词"the"而不是两个单词'the'

s="the the the the"
s.scan(/\sthe\s/)
output - [" the "]

我期待表达能够返回两个中间词""。为什么会这样。

1 个答案:

答案 0 :(得分:1)

这里的问题是\s个模式消耗空白。 scan方法仅匹配非重叠匹配,并且您预期的匹配 重叠。

您需要使用looakrounds来获得重叠匹配:

/(?<=\s)the(?=\s)/

请参阅regex demoRuby demo,其中puts s.scan(/(?<=\s)the(?=\s)/)打印2 the个实例。

模式详情

  • (?<=\s) - 一个积极的外观,需要在the
  • 之前立即出现空格
  • the - 文字the
  • (?=\s) - 在the之后需要空格的正向前瞻。

请注意,如果您使用\bthe\b(即使用单词边界),您将从字符串中获取所有the个实例\b只是在单词char之前或之后断言位置(字母,数字或下划线)。