我可以使用正面的lookbehind来返回Ruby中的匹配吗?

时间:2016-08-10 15:17:47

标签: ruby regex

假设我想找到给定字符串中以b开头并以ing结尾的所有单词。但是,我只想返回部分内容 在ing之前的词。因此,如果这个词是拯救,我应该只 匹配并返回保释金。

下面的Ruby正则表达式肯定会匹配:

\bt[a-zA-Z]*ing\b

但它并没有只返回"保释"一部分。我可以使用某种前瞻或后瞻性断言吗?如果没有,在Ruby中这样做的好方法是什么?

2 个答案:

答案 0 :(得分:0)

words = "booster bailings balling failing"
words.scan /(?<=\b)b\w*?(?=ing\b)/
#⇒ ["ball"]

答案 1 :(得分:0)

以下是提取所需信息的两种方法。

str = "blathering fumbling blinging bérgering blings"

str.scan(/\bb[[:alpha:]]*(?=ing\b)/)
  #=> ["blather", "bling", "bérger"]

str.scan(/\b(b[[:alpha:]]*)ing\b/).flatten
  #=> ["blather", "bling", "bérger"]

,而

str.scan(/\bb[a-zA-Z]*(?=ing\b)/)
  #=> ["blather", "bling"]