我正在使用preg_match_all()
函数从HTML代码中解析一些数据。为了使它更容易,我使用正则表达式工具来做到这一点。
所以,我的模式就像:
<td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " >(.*?)</td>
当我在regex工具中使用它时,我得到了结果。但是当我输入preg_match_all()
函数时,我没有得到结果。我尝试在在线PHP函数测试器(functions-online.com/preg_match_all.html)上运行它,该模式使用消息unknown modifier 'w'
给出null结果。
preg_match_all('|<td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " >(.*?)</td>|', $v, $matches3, PREG_PATTERN_ORDER);
是什么让它有不同的结果?以及如何使用preg_match_all()
使用该模式获得结果?
我希望有人帮助我。谢谢。
答案 0 :(得分:3)
preg_match_all('/<td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " >(.*?)<\/td>/', $stringToSearch, $results)
首先,您必须使用分隔符,例如。 /
包装regexp。
其次,如果您使用/
作为分隔符,则必须在提供的正则表达式中避免每次出现它。
答案 1 :(得分: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解析器。