preg_replace PHP regex, который соответствует нескольким строкам

Как я создаю regex, который принимает во внимание, что предмет состоит из нескольких строк?

"m"модификатор для каждый, кажется, не работает.

16
задан Peter Mortensen 4 July 2019 в 16:11
поделиться

2 ответа

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

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

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

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

'/.*/'

, тогда регулярное выражение будет соответствовать только Строка 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').

49
ответ дан 30 November 2019 в 15:24
поделиться

Попробуйте использовать модификатор 's'. Означает 'обрабатывать как одну строку'.

'm' позволяет использовать начала и концы строк ^ и $.

8
ответ дан 30 November 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: