这就是问题:
我们有包含2个单词的字符串,例如:
["bed time", "red carpet", "god father", "good game"]
正则表达式应与god father
和good game
匹配,因为它们中的每个都有一个不包含字母e
(上帝和好)的单词,并且它不应与{{1}匹配}和“red carpet”,因为字符串中的两个单词都有字母bed time
。
我在考虑e
,但它匹配所有这些字符串。
答案 0 :(得分:1)
答案 1 :(得分:0)
使用此:
/^(\w+ [^e]+|[^e ]+ \w+)$/i
它搜索以下任何一个:
请注意,[a-z]
可用于代替\w
,如果这是解决方案所需的内容。假设这些例子真正代表了输入,那么要么应该充分发挥作用。
此代码针对输入数组测试正则表达式:
phrases = ["bed time", "red carpet", "god father", "good game"]
phrases.each do |phrase|
puts "#{phrase}" if phrase.match(/^(\w+ [^e]+|[^e ]+ \w+)$/i)
end
结果是:
god father
good game
答案 2 :(得分:0)
/\b([^ e])+\b/gi
这将选择不包含e | E的所有单词。
答案 3 :(得分:0)
/\b[^\We]+\b/g
\W
表示不是“单词”字符。^\W
表示“单词”字符。[^\We]
表示“单词”字符,但不是“e”。查看实际效果:word without e
顺便说一句,我认为这种模式可以用作正则表达式的“and”运算符。
一般来说,如果:
A = not a
B = not b
然后:
[^AB] = not(A or B)
= not(A) and not(B)
= a and b
所以,如果我们想在正则表达式中实现 difference set 的概念,我们可以这样做:
a - b = a and not(b)
= a and B
= [^Ab]