如何访问捕获组而不是全字符串匹配?

时间:2017-06-27 13:23:21

标签: php preg-match capture-group

我正在使用preg_match()搜索文件并列出结果。

在我的档案中,我有:

city 1 | address 1 | phone 1
city 2 | address 2 | phone 2
city 3 | address 3 | phone 3

例如,如果我搜索address 1,它会显示整行。

有没有办法只显示'地址1'?

2 个答案:

答案 0 :(得分:0)

你应该使用Subpatterns。您可以使用这些括号将子模式放在正则表达式中:

()

它们之间的所有内容都是您的子模式,并且如果匹配,将与匹配项一起添加到您的数组中。

比较一下:

$subject = 'thiswhatiamlookingforallday';
preg_match('/.*whatiamlookingfor.*/', $subject, $matches);
print_r($matches);

到此:

$subject = 'thiswhatiamlookingforallday';
preg_match('/.*(whatiamlookingfor).*/', $subject, $matches);
print_r($matches);

它应该给你一些暗示。

答案 1 :(得分:-1)

我认为您使用的参数匹配,不是吗?

  

如果提供了匹配,那么它将填充搜索结果。   $ matches [0]将包含与完整模式匹配的文本,   $ matches [1]将具有与第一个捕获的匹配的文本   带括号的子模式,依此类推。

http://php.net/manual/en/function.preg-match.php