【问题标题】:How to access capture group instead of fullstring match?如何访问捕获组而不是全字符串匹配?
【发布时间】:2017-06-27 13:23:21
【问题描述】:

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

在我的文件中:

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

例如,如果我搜索address 1,它将显示完整的行。

有没有办法只显示“地址 1”?

【问题讨论】:

  • 请出示您的代码并说明问题所在。
  • 你要搜索'address 1'并返回'address 1'有什么目的?
  • 假设我在列表中的某个位置“地址 554”。它们除以 |当我搜索 554 时,我需要获得完整 |地址 554 |
  • @qqq123 您应该使用任何新信息更新您的问题,而不是通过评论提供新的细节。仍然没有足够的信息来提供准确/完善的答案。
  • @qqq123 您必须出示您的代码,我们才能为您提供适当的帮助。

标签: php preg-match capture-group


【解决方案1】:

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

()

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

比较一下:

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

到这里:

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

它应该会给你一个提示。

【讨论】:

    【解决方案2】:

    我认为你使用的是参数matches,不是吗?

    如果提供了匹配项,则将其填充为搜索结果。 $matches[0] 将包含匹配完整模式的文本, $matches[1] 将具有匹配第一个捕获的文本 带括号的子模式,等等。

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

    【讨论】:

    • 在寻求对问题的澄清并提供手动参考时,这样做是因为 cmets 没有答案。此问题缺少提供准确答案所需的详细信息。
    猜你喜欢
    • 2016-11-16
    • 2017-01-08
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2016-06-01
    相关资源
    最近更新 更多