正则表达式的单词不能以另一个单词开头,但必须以某些字符开头

时间:2017-09-21 23:01:07

标签: ruby regex string

我想匹配字符串中单词的出现次数。单词不能以" per"开头,但必须以单词边界或数字开头。因此,例如,如果我要匹配的词是" pie",那么这将匹配

"123pie"
"abc pie"
"d-pie"

但这不会

"per pie"
"mpie"

我能够弄清楚如何编写一个正则表达式,指明我的单词前面不能有单词" per" ...

regex = /(?<!per\s)#{Regexp.escape(word)}(\s|$)/i

我不知道如何将其他条件纳入其中。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

你有一部分带有负面的背后隐藏,只需为一个单词中断或数字添加一个正面的lookbehind,它应该这样做:

/(?<!per\s)(?<=\b|\d)#{Regexp.escape(word)}/i

示例:

> strs
[
  [0] "123pie",
  [1] "abc pie",
  [2] "abc Pie",
  [3] "d-pie",
  [4] "per pie",
  [5] "mpie",
  [6] "perpie"
]

> word = "pie"

> regex = /(?<!per\s)(?<=\b|\d)#{Regexp.escape(word)}/i

> strs.select {|str| str =~ regex }
[
  [0] "123pie",
  [1] "abc pie",
  [2] "abc Pie",
  [3] "d-pie"
]

请参阅:http://rubular.com/r/slD3Uz9iw9以获取交互式示例。

并且:https://ruby-doc.org/core-2.1.0/Regexp.html#class-Regexp-label-Anchors