【问题标题】:php RegExp: how to use newline in expression?php RegExp:如何在表达式中使用换行符?
【发布时间】:2011-09-22 09:46:28
【问题描述】:

例如它的工作原理:

{<div\s+class=\"article\"><h2(.*)</div>}s

如果我这样做,我什么也得不到:

{<div\s+class=\"article\">
    <h2(.*)
 </div>}s

我怀疑我应该使用一些修饰符,但我从这里知道是哪一个:http://php.net/manual/en/reference.pcre.pattern.modifiers.php

【问题讨论】:

  • 如果你坚持使用正则表达式解析HTML,至少使用.*?而不是.*(除非整个页面只有一个&lt;div&gt;元素)。此外,{} 对于正则表达式分隔符来说是一个糟糕的选择。如果您不想使用/,最好使用~#
  • 添加/siU,问题必须解决。

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


【解决方案1】:

那就是/x 修饰符:

x (PCRE_EXTENDED)

如果设置了此修饰符,则模式中的空白数据字符将被完全忽略,除非转义或在字符类中,并且在字符类之外未转义的 # 和下一个换行符之间的字符(包括在内)也将被忽略。这等效于 Perl 的 /x 修饰符,并且可以将 cmets 包含在复杂的模式中。但是请注意,这仅适用于数据字符。空白字符可能永远不会出现在模式中的特殊字符序列中,例如序列 (?( 它引入了条件子模式。

它还允许对模式进行注释,这非常有用:

{<div\s+class=\"article\">  # many spaces between the div and the attribute
    <h2(.*)                 # don't really care about closing the tag
 </div>}sx

【讨论】:

  • 非常感谢!打开

    只是为了调试。现在它完美运行!

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 2012-08-05
  • 1970-01-01
相关资源
最近更新 更多