PHP preg_match: 多次重复一个字符 class

PHP preg_match: Multiple repetitions to one character class

我想允许对一个定义的字符进行多次重复 class :)。

$data = 'abc@abc-abc.abc';
echo preg_match('/^[a-z]+[a-z0-9._-]+[a-z]+@+[a-z0-9]+[._-]?+[a-z0-9]+\.?+([a-z0-9]{2,})$/', strtolower($data)); // works (echo 1)

$data = 'abc@abc-abc.abc.abc';
echo preg_match('/^[a-z]+[a-z0-9._-]+[a-z]+@+[a-z0-9]+[._-]?+[a-z0-9]+\.?+([a-z0-9]{2,})$/', strtolower($data)); // doesn't work (echo 0, but should return 1)

您可以在末尾添加非捕获组 (?: 内的点,然后使用 *

将该组作为一个整体重复 0 次或更多次

如果以 . 开头的部分或末尾的组合 [._-] 至少出现 1 次,则使用 + 而不是 *

^[a-z]+[a-z0-9._-]+[a-z]+@+[a-z0-9]+[._-]?+[a-z0-9]+(?:[._-][a-z0-9]{2,})+$                                      

Regex demo