正则表达式排除一个单词

3
我想写一个正则表达式,找到所有看起来像“animals.*”的字符串,在“*”的位置可以是任何符号,但不可以是“elephant”。
结果应该是:
输入:animals.fox => 结果:animals.fox
输入:animals.kitten => 结果:animals.kitten
但是:
输入:animals.elephant => 结果:无
我写了一个正则表达式,但它不能正常工作。如何修复它?
animals\.(?!elephant)

1
你的意思是需要匹配单词到结尾吗?可以试试animals\.(?!elephant)\w+ - Wiktor Stribiżew
@Евгений,我的回答有帮到你吗? - Wiktor Stribiżew
1个回答

2
似乎唯一的问题在于匹配 . 后面的单词。你使用的先行断言是零宽度断言,不会将匹配的字符放入输出中,它只是检查当前位置右侧的文本是否与其模式不匹配。如果匹配,则匹配失败。否则,它只返回 true。因此,您需要 消耗 . 后面的单词。
在您的模式末尾添加 [a-zA-Z]+\w+(取决于您需要匹配什么,只有字母还是字母/数字/下划线):
animals\.(?!elephant\b)\w+

请查看正则表达式演示

请注意,在许多语言中,当您使用字符串文字定义正则表达式模式时,需要双重转义反斜杠。请参见正则表达式在regex101.com上有效,但在生产环境中无效


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接