【问题标题】:Get text with brackets获取带括号的文本
【发布时间】:2014-12-15 19:27:16
【问题描述】:

我正在使用 preg_match 和 regex 从网页获取信息。

该页面包含以下文本:

Choose platform: Xbox
Barcode (EAN) no: 0123456789

第一个获得平台的正则表达式工作:

preg_match_all('#Choose Platform:.*?>([^<]+)</a>#is', $file, $platform); 

但是,在尝试获取第二段文本时,我遇到了问题:

preg_match_all('#<b>Barcode \\(\\EAN\\) No:</b>.*?>([^<]+)</a>#is', $file, $matches1);

我试图逃脱括号但没有运气?转义括号时是“\”还是“//”?

【问题讨论】:

  • 嗯,你在正则表达式中有一个错字。 Barcode != Bar code。此外,无需转义 E,而且您的正则表达式中似乎有一些 HTML 不在您提供的示例文本中。
  • @EdCottrell 抱歉,它们只是拼写错误,我没有放置整个 HTML,因为我认为它不会有所作为。我关心的是如何转义括号?
  • \ ,而不是//。但是,是的,如果您希望我们帮助您解决问题,HTML 绝对会有所作为。
  • 为了匹配你的例子:preg_match_all('#Barcode \(EAN\) no:([^&lt;]+)#is', $file, $matches1); 看到它只是\(EAN\)
  • 由于你用单引号分隔字符串,引擎会看到\\(,这意味着它正在寻找文字转义,然后是捕获组元字符的开始。

标签: php regex preg-match preg-match-all


【解决方案1】:

这是我想出的正则表达式:

$pattern = '#<b>Barcode \(EAN\) no:</b> .*?([^<]+)</a>#is';

使用这个,我得到了以下响应

Array
(
    [0] => Array
        (
            [0] => Barcode (EAN) no: 0123456789
        )

    [1] => Array
        (
            [0] => 0123456789
        )

)

所以$matches1[1][0] 包含条形码:D

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多