PHP Regex Любой персонаж

147
12

Символ . в регулярном выражении php принимает все символы, кроме новой строки. Что я могу использовать, чтобы принимать ВСЕ символы, включая символы новой строки?

спросил(а) 2010-10-26T20:26:00+04:00 9 лет, 1 месяц назад
5
Решение
196

Это обычно используется для захвата всех символов:


[\s\S]

Вы можете использовать любую другую комбинацию "Type-X + Non-Type-X" следующим образом:

[\d\D]
[\w\W]

но [\s\S] распознается по соглашению как сокращенное обозначение "действительно что-либо".


Вы также можете использовать ., если вы переключите регулярное выражение в режим "dotall" (a.k.a. "single-line" ) с помощью модификатора "s". Иногда это не жизнеспособное решение (динамическое регулярное выражение в черном ящике, например, или если вы не хотите изменять все регулярное выражение). В таких случаях другие альтернативы делают то же самое, независимо от того, как настроено регулярное выражение.

ответил(а) 2010-10-26T20:29:00+04:00 9 лет, 1 месяц назад
Еще 4 ответа
94

Это символ ., который означает "каждый символ" ( редактировать: отредактирован OP). И вам нужно добавить параметр s в ваше регулярное выражение, например:

preg_match("`(.+)`s", "\n");

ответил(а) 2010-10-26T20:27:00+04:00 9 лет, 1 месяц назад
48

будет


[.\n]+

не работает?


Как насчет (.|\n)+? Я тестировал его и, похоже, работал.


Я уверен, что это буквальная интерпретация именно того, что вы просите.

ответил(а) 2010-10-26T20:30:00+04:00 9 лет, 1 месяц назад
33

Здесь важная вещь отсутствует. [\s\S] соответствует одному символу, тогда как новая строка может быть символьной последовательностью. (Windows использует два символа: \r\n.) Ни .DOT_ALL модификатор), ни [\s\S] не будет соответствовать последовательности новой строки. Лучший способ сопоставить любой символ или любую новую строку - (.|\R), "все, кроме новой строки или новой строки". \R соответствует \n, \R и \r\n.

ответил(а) 2017-05-14T11:20:00+03:00 2 года, 7 месяцев назад
33

Руководство по PHP для Dot утверждает, что:


Если установлена ​​опция PCRE_DOTALL, то точки также совпадают с символами новой строки.


ответил(а) 2017-05-14T10:43:00+03:00 2 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема