为什么在此示例中,两个正则表达式对电子邮件的评估方式不同?
http://codepad.viper-7.com/SEgMzZ
<?php
$email = 'ΘΘΘme@gmail.com';
$regex = '#\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b#i';
$regex2 = '#^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$#i';
if (preg_match($regex, $email)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
if (preg_match($regex2, $email)) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
?>
编辑:我希望这两个都不匹配
答案 0 :(得分:3)
问题出在你的奇怪Θ
字符(U0398希腊大写字母Theta)上。 PHP并未将它们视为单词的一部分,因此ΘΘΘ
和me@...
之间存在单词边界。
第一个正则表达式匹配,因为字符串的其余部分没问题。
第二个不匹配,因为那些Θ
不在第一个字符类中,所以你的字符串与它不匹配。
正如Wrikken指出的那样,您可以在正则表达式中使用/u
(PCRE8)修饰符来使PHP将字符串视为UTF-8。在这种情况下,Theta字母不会引入单词边界,并且两个表达式都不匹配。