如何编写一个RegEx模式来测试一个字符串是否包含几个具有结构的子串:
"cake.xxx"
其中xxx是任何东西,但不是“奶酪”或“牛奶”或“奶油”。
例如:
"I have a cake.honey and cake.egg"
应该返回true
,但"I have a cake.**milk** and cake.egg"
应该返回false
。答案 0 :(得分:17)
这是你想要的吗?
^(?!.*cake\.(?:milk|butter)).*cake\.\w+.*
如果它包含“cake.XXX”,则会匹配整行,但是当它的“cake.milk”或“cake.butter”
时,它将匹配 .*cake\.\w+.*
如果有“蛋糕”,这部分将匹配。其次是至少一个人。
(?!.*cake\.(?:milk|butter))
这是一个负向前瞻,如果字符串包含您不允许的单词之一,这将阻止匹配
^
将模式锚定到字符串的开头
答案 1 :(得分:2)
正则表达式字符(例如*
,+
,?
和{0}
)仅适用于最后一个字符
你应该将单词或短语放在non-matching group中,如下所示:
(?:someWord){0}
表示someWord
重复(存在)0次,而不会将其放入您的匹配
(?!someWord)
做同样的事情
regex101是测试正则表达式并查看细分的好方法