正则表达式匹配单点但不是两个点?

Car*_*on6 7 php regex pattern-matching

尝试为电子邮件地址检查创建正则表达式模式.这将允许一个点(.)但不是如果彼此相邻的多个.

应该匹配:test.test@test.com

不应该匹配:test..test @ test.com

现在我知道互联网上有成千上万的电子邮件匹配示例,所以请不要发布完整解决方案的链接,我想在这里学习.

实际上,我最感兴趣的部分只是本地部分:test.test应该匹配和test..test不匹配.谢谢你的帮助.

Mih*_*ncu 5

这对我来说更合乎逻辑:

/[^.]([\.])[^.]/
Run Code Online (Sandbox Code Playgroud)

这很简单。前瞻和后视确实很有用,因为它们不捕获值。但在这种情况下,捕获组仅在中间点附近。


Jun*_*uxx 5

您可以允许任意数量的[^\.](除了一个点的任何字符)和[^\.])\.[^\.](点由两个非点附件)通过使用脱节(管道符号|之间),并把整个事情与*之间(任意数量的那些)^,并$因此整个字符串由那些组成.这是代码:

$s1 = "test.test@test.com";
$s2 = "test..test@test.com";
$pattern = '/^([^\.]|([^\.])\.[^\.])*$/';
echo "$s1: ", preg_match($pattern, $s1),"<p>","$s2: ", preg_match($pattern, $s2);
Run Code Online (Sandbox Code Playgroud)

产量:

test.test@test.com: 1
test..test@test.com: 0
Run Code Online (Sandbox Code Playgroud)