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

时间:2017-08-19 12:11:36

标签: php regex

我不知道如何制作正则表达式,这就是我问这个问题的原因。我有一个字符串,如chirag patel <chiragxxx@gmail.com>

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

 preg_match("/\<(.*)\>/", $data['From'], $matches);
 $email = $matches[1];

如何使用正则表达式从上面的字符串中获取名称?

我的预期输出是:chirag patel

5 个答案:

答案 0 :(得分:3)

您可以使用正则表达式

.*(?=\<(.*)\>)

查看演示here。这是以下

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

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

var_dump($matches[0]);

答案 1 :(得分:2)

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

(\pL+[\pL\h.-]*?)\h*<([^>]+)>

RegEx Demo

RegEx分手:

  • (\pL+[\pL\h.-]*?)#group#1匹配包含Unicode字母,点,连字符,空格的1+名称
  • \h*:匹配0个或更多空格
  • <([^>]+)>:第2组用于捕获<>个字符之间的电子邮件地址

<强>代码:

preg_match('~(\pL+(?:[\pL\h-]*\pL)?)\h*<([^>]+)>~u', $str, $matches);

// Print the entire match result
print_r($matches);

答案 2 :(得分:2)

在php中使用它

$data['From'] = "chirag patel <chiragxxx@gmail.com>";
preg_match("/.*(?=\<(.*)\>)/", $data['From'], $matches);
print_r($matches); // 0 : name, 1 : email

答案 3 :(得分:2)

您可以为名称添加捕获组。

@client.command(pass_context=True)
    async def yt(ctx):
        url = ctx.message.content
        url = url.strip('!yt ')

        author = ctx.message.author
        voice_channel = author.voice_channel
        vc = await client.join_voice_channel(voice_channel)

        player = await vc.create_ytdl_player(url)
        player.start()

答案 4 :(得分:2)

我知道它已被回答,但因为它是在PHP中,它支持命名模式,因为它可能看起来很酷:

{{1}}

名称电子邮件将成为 $ matches 数组中的键。