PHP RegExp: как использовать новую строку в выражении? - PullRequest
2 голосов
/ 22 сентября 2011

Например, это работает:

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

Если я так поступлю, я ничего не получу:

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

Я подозреваю, что мне следует использовать какой-то модификатор, но я знаю, какой именноотсюда: http://php.net/manual/en/reference.pcre.pattern.modifiers.php

1 Ответ

4 голосов
/ 22 сентября 2011

Это будет модификатор /x:

x (PCRE_EXTENDED)

Если этот модификатор установлен, символы пробельных символов вшаблон полностью игнорируется, за исключением случаев, когда он экранирован или находится внутри класса символов, а символы между неэкранированным символом # вне класса символов и следующим символом новой строки, включительно, также игнорируются.Это эквивалентно модификатору Perl / x и позволяет включать комментарии в сложные шаблоны.Обратите внимание, однако, что это относится только к символам данных.Пробельные символы могут никогда не появляться в последовательностях специальных символов в шаблоне, например, в последовательности (? (Которая вводит условный подшаблон.

Это также позволяет комментировать шаблон, что чрезвычайно полезно:

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