Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取电子邮件的正则表达式正则表达式函数与大写字母不匹配_Php_Regex_Screen Scraping - Fatal编程技术网

Php 获取电子邮件的正则表达式正则表达式函数与大写字母不匹配

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-]+)*

我正在使用regex函数从字符串中获取电子邮件地址。电子邮件地址位于字符串内,字符串的两侧都包含不同的字符,如

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';