【问题标题】:Preg_match_all() : Unknown modifier 'w'Preg_match_all() : 未知修饰符 'w'
【发布时间】:2013-09-10 15:20:55
【问题描述】:

我正在使用 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() 获得结果?

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

【问题讨论】:

  • 您如何在代码中使用正则表达式?你能用preg_match_all显示代码sn-p吗?
  • 你能告诉我们你是如何调用preg_match_all()函数的吗?
  • preg_match_all('|&lt;td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " &gt;(.*?)&lt;/td&gt;|', $v, $matches3, PREG_PATTERN_ORDER);
  • 谢谢,我已经得到结果了。
  • 不要使用正则表达式解析 HTML。使用适当的 HTML 解析模块。 您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。请参阅htmlparsing.com/phpthis SO thread,了解如何使用已经编写、测试和调试过的 PHP 模块正确解析 HTML。

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


【解决方案1】:

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

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

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

【讨论】:

  • 我知道了/&lt;td class="(weekday|weekend) reservation (primary|alternate) fixwidth calday fixwidth " &gt;(.*?)&lt;\/td&gt;/。谢谢
  • @Rijalulfikri 如果 Elon 的回答解决了您的问题,那么请接受它以向作者表示感谢,或者如果我的回答解决了您的问题,那么请接受我的。谢谢。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    相关资源
    最近更新 更多