我想匹配字符串中单词的出现次数。单词不能以" per"开头,但必须以单词边界或数字开头。因此,例如,如果我要匹配的词是" pie",那么这将匹配
"123pie"
"abc pie"
"d-pie"
但这不会
"per pie"
"mpie"
我能够弄清楚如何编写一个正则表达式,指明我的单词前面不能有单词" per" ...
regex = /(?<!per\s)#{Regexp.escape(word)}(\s|$)/i
我不知道如何将其他条件纳入其中。我怎么能这样做?
答案 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