Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 - Fatal编程技术网

正则表达式从php中的字符串获取名称

正则表达式从php中的字符串获取名称,php,regex,Php,Regex,我不知道如何制作正则表达式,这就是为什么我要问这个问题。我有一个字符串,比如chiragpatel 我有一个正则表达式从字符串中获取电子邮件id preg_match("/\<(.*)\>/", $data['From'], $matches); $email = $matches[1]; preg\u match(“/\/”,$data['From'],$matches); $email=$matches[1]; 如何使用正则表达式从上面的字符串中获取名称 我的预期输出是:

我不知道如何制作正则表达式,这就是为什么我要问这个问题。我有一个字符串,比如
chiragpatel

我有一个正则表达式从字符串中获取电子邮件id

 preg_match("/\<(.*)\>/", $data['From'], $matches);
 $email = $matches[1];
preg\u match(“/\/”,$data['From'],$matches);
$email=$matches[1];
如何使用正则表达式从上面的字符串中获取名称

我的预期输出是:
ChiragPatel

您可以使用正则表达式

.*(?=\<(.*)\>)
*(?=\)
查看演示。下面是以下内容的php代码

$re = '/.*(?=\<(.*)\>)/';
$str = 'chirag patel <chiragxxx@gmail.com>';

preg_match($re, $str, $matches);

var_dump($matches[0]);
$re='/.*(=\)/;
$str='chirag patel';
预匹配($re,$str,$matches);
var_dump($matches[0]);

您可以使用此正则表达式在两个单独的组中捕获姓名和电子邮件地址:

(\pL+[\pL\h.-]*?)\h*<([^>]+)>
在php中使用此选项

$data['From'] = "chirag patel <chiragxxx@gmail.com>";
preg_match("/.*(?=\<(.*)\>)/", $data['From'], $matches);
print_r($matches); // 0 : name, 1 : email
$data['From']=“chirag patel”;
预匹配(“/.*(=\)/”,$data['From'],$MATCHS);
打印($matches);//0:姓名,1:电子邮件

为名称添加一个捕获组

preg_match("/(.*)\<(.*)\>/", $data['From'], $matches);
$name = $matches[1];
$email = $matches[2];
preg\u match(“/(.*)\/”,$data['From'],$matches);
$name=$matches[1];
$email=$matches[2];

我知道答案已经给出,但因为它是用PHP编写的,支持命名模式,而且可能看起来很酷:

/(?<name>.*?) \<(?<email>.*?)\>/g
/(?*?)\/g

nameemail将是$matches数组中的键

如何在php中实现它?答案中添加了为什么要使用
preg\u match\u all
preg_match
是充分的。是的,经过编辑,不熟悉regex101why Negative中代码生成器使用的php语法??这是一个真正的问题,你不需要正则表达式:
$name=strtok($data['From']),@MagnusEriksson,我已经在使用正则表达式来获取电子邮件id,所以我最好在一种情况下使用它,同时获取名称和电子邮件地址
/(?<name>.*?) \<(?<email>.*?)\>/g