0

我正在使用preg_match_all()函数从 HTML 代码中解析一些数据。为了使它更容易,我使用正则表达式工具来做到这一点。所以,我的模式是这样的:

<td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " >(.*?)</td>

当我在正则表达式工具中使用它时,我得到了结果。但是当我投入preg_match_all()使用时,我没有得到结果。我尝试在在线 PHP 函数测试器 (functions-online.com/preg_match_all.html) 上运行它,该模式给出 null 结果并显示消息unknown modifier 'w'

抱歉..,这就是我所说的使用 preg_match_all 函数:

preg_match_all('|<td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " >(.*?)</td>|', $v, $matches3, PREG_PATTERN_ORDER);

是什么让它有不同的结果?以及如何使用preg_match_all()该模式获得结果?

我希望有人帮助我。之前谢谢。

4

2 回答 2

3

preg_match_all('/<td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " >(.*?)<\/td>/', $stringToSearch, $results)

首先,您必须使用分隔符,例如。/包装正则表达式。

其次,如果您/用作分隔符,则必须在提供的正则表达式中转义它的每一次出现。

于 2013-09-10T15:23:24.860 回答
1

正如我所见,您使用|的是正则表达式分隔符,但它干扰了正则表达式中使用的 OR 运算符|,只需像这样调用函数:

 preg_match_all('/<td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " >(.*?)</td>/', $v, $matches3, PREG_PATTERN_ORDER);

这就是 PHP 对原始表达式的成像方式:|<td class="(weekday|w然后它假定w管道字符之后|是正则表达式修饰符,但w不是,因此这是一个了不起的问题。

警告:请注意,您不应使用正则表达式来解析 HTML,而应使用 HTML 解析器。

于 2013-09-10T15:34:54.463 回答