Php 获取电子邮件的正则表达式正则表达式函数与大写字母不匹配
我正在使用regex函数从字符串中获取电子邮件地址。电子邮件地址位于字符串内,字符串的两侧都包含不同的字符,如Php 获取电子邮件的正则表达式正则表达式函数与大写字母不匹配,php,regex,screen-scraping,Php,Regex,Screen Scraping,我正在使用regex函数从字符串中获取电子邮件地址。电子邮件地址位于字符串内,字符串的两侧都包含不同的字符,如 string=:'这是我想离开这里的电子邮件地址,艾哈迈德_khalid@yahoo.com第一次尝试“ 以下语法返回电子邮件地址,但缺少大写字符,并从类似于[hmad]的about字符串返回电子邮件地址_khalid@yahoo.com]缺少大写字母A $regex='`([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*
string=:'这是我想离开这里的电子邮件地址,艾哈迈德_khalid@yahoo.com第一次尝试“
以下语法返回电子邮件地址,但缺少大写字符,并从类似于[hmad]的about字符串返回电子邮件地址_khalid@yahoo.com]缺少大写字母A
$regex='`([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})`';
我没有详细检查您的正则表达式,但是如果大写字符是唯一的问题,那么只需在最后一个正则表达式分隔符之后添加
I
修饰符
$regex='`([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})`i';
此修饰符使正则表达式匹配不区分大小写
好的,那么您应该至少在正则表达式中添加一些锚点\b
,以避免部分匹配
$regex='`\b([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,6})\b`i';
看到了吗
\b
匹配从单词字符(a-Za-z0-9
)到非单词字符(所有其他字符)的更改,反之亦然
您应该考虑将最后一个量词从{2,4}
更改为{2,6}
,在javascript中,有一些罕见的域长度超过4个字符。
function extractEmail()
{
var sentnce="Here is the email address I would like to get out of here w555@yahoo.co.in in 1 st try";
var regEmail=/^[a-zA-Z0-9]+[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+[\.]{1}[a-zA-Z]{2,4}$/;
var strArray=sentnce.split(' ');
for(i=0;i<strArray.length;i++)
{
if(regEmail.test(strArray[i]))
{
alert('email: '+strArray[i]);
}
}
}
函数提取电子邮件()
{
var sennce=“这是我想离开这里的电子邮件地址w555@yahoo.co.in第一次尝试”;
var regEmail=/^[a-zA-Z0-9]+[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+[\.]{1}[a-zA-Z]{2,4}$/;
var strArray=信号分离(“”);
对于(i=0;i在你的正则表达式中,\u a-z0-9
不包括大写字母。如果出现这种情况,请使用它:\w
(“单词字符”元序列、字母数字或“字母、数字和下划线”):[\w-]
(编辑)我也很确定你可以不使用未量化的paren组(您正在匹配整个地址,而不是使用匹配组对其进行解析,因此它们没有做任何有用的事情),并获得一个更漂亮的正则表达式:
$regex = "\b[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.[a-zA-Z]{2,6}\b";
vs
(谢谢,酷网站stema:)
$regex='`\b([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,6})\b`i';