正则表达式负向超前无法正常工作

时间:2019-03-19 20:22:05

标签: regex

我正在努力进行电子邮件验证,这将允许添加已发送地址的电子邮件,只要它们不来自某些TLD。问题是,我的Regex行为不正常。我希望它确保电子邮件有效并且没有一些TLD,例如,我想要“ johndoe@domain.com”,但是我不想要“ johndoe@domain.xyz”,在第二个示例中,我阻止添加“ xyz”电子邮件的TLD。这是我当前的正则表达式:

^[a-zA-Z0-9]+[a-zA-Z0-9._%-]*@.*\.(?!xyz)$

问题在于,TLD将会去向何处,根本不会匹配任何内容。它不会匹配不应该匹配的xyz,但也不会匹配org,com,net或任何其他TLD。在Regex方面,我并不太先进,但是我认为负先行只会阻止其后的字符串,而不会阻止其后的任何内容。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

通过使用负前瞻,您是在告诉正则表达式不匹配xyz (?!xyz),但您没有在告诉它匹配什么。

如果您要匹配其他任何内容,可以在.*之后附加(?!xyz)

^[a-zA-Z0-9]+[a-zA-Z0-9._%-]*@.*\.(?!xyz).*$