从 php 正则表达式中提取匹配项

新手上路,请多包涵

在 perl 正则表达式中,我们可以提取匹配的变量,如下所示。

    # extract hours, minutes, seconds
   $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format
   $hours = $1;
   $minutes = $2;
   $seconds = $3;

如何在 php 中执行此操作?

 $subject = "E:contact@customer.com I:100955";
$pattern = "/^E:/";
if (preg_match($pattern, $subject)) {
    echo "Yes, A Match";
}

如何从那里提取电子邮件? (我们可以分解并获取它……但是想要一种直接通过正则表达式获取它的方法)?

原文由 Natkeeran 发布,翻译遵循 CC BY-SA 4.0 许可协议

回复
阅读 68
2 个回答

尝试使用 preg_match 的命名子模式语法:

 <?php

$str = 'foobar: 2008';

// Works in PHP 5.2.2 and later.
preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);

// Before PHP 5.2.2, use this:
// preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);

print_r($matches);

?>

输出:

  Array (
     [0] => foobar: 2008
     [name] => foobar
     [1] => foobar
     [digit] => 2008
     [2] => 2008 )

原文由 Chris Rasco 发布,翻译遵循 CC BY-SA 2.5 许可协议

查看php 手册

int preg_match ( string \(pattern , string \)subject [, array &\(matches \[, int \)flags [, int $offset ]]] )

如果提供了 matches,则它会填充搜索结果。 \(matches\[ [0](http://be.php.net/preg_match) \] 将包含与完整模式匹配的文本,\)matches1 将包含与第一个捕获的带括号的子模式匹配的文本,依此类推。

 $subject = "E:contact@customer.com I:100955";
$pattern = "/^E:(?<contact>\w+) I:(?<id>\d+)$/";
if (preg_match($pattern, $subject,$matches)) {
    print_r($matches);
}

原文由 Yannick Motton 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏