регулярное выражение php preg_replace, которое соответствует нескольким строкам

Я уверен, что это тривиально, но я не могу создать регулярное выражение, которое учитывает, что объект состоит из нескольких строк. Модификатор « m » для одного не работает.

Solutions Collecting From Web of "регулярное выражение php preg_replace, которое соответствует нескольким строкам"

Максвелл Трой Милтон Кинг прав, но, так как его ответ немного короткий, я опубликую его и приведу примеры для иллюстрации.

Во-первых,. метасимвол по умолчанию НЕ соответствует разрыву строки. Это справедливо для многих реализаций регулярных выражений, включая вкус PHP. При этом возьмите текст:

 $text = "Line 1\nLine 2\nLine 3"; 

и регулярное выражение

 '/.*/' 

то регулярное выражение будет соответствовать Line 1 . Посмотреть на себя:

 preg_match('/.*/', $text, $match); echo $match[0]; // echos: 'Line 1' 

так как .* "останавливает сопоставление" в \n (новый символ строки). Если вы хотите, чтобы он соответствовал разрыву строк, добавьте модификатор s (модификатор DOT-ALL) в конце вашего регулярного выражения:

 preg_match('/.*/s', $text, $match); echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3' 

Теперь о m-модификаторе (многострочном): это позволит ^ соответствовать не только началу входной строки, но и началу каждой строки. То же самое с $ : это позволит $ соответствовать не только концу входной строки, но и концу каждой строки.

Пример:

 $text = "Line 1\nLine 2\nLine 3"; preg_match_all('/[0-9]$/', $text, $matches); print_r($matches); 

который будет соответствовать только 3 (в конце ввода). Но:

но включение m-модификатора:

 $text = "Line 1\nLine 2\nLine 3"; preg_match_all('/[0-9]$/m', $text, $matches); print_r($matches); 

все (одиночные) цифры в конце каждой строки («1», «2» и «3») совпадают.

Вы попробовали 's' модификатор? Значение «рассматривать как одну линию. 'm' позволяет использовать начальные и конечные строки $ и $ line.