Символ .
в регулярном выражении php принимает все символы, кроме новой строки. Что я могу использовать, чтобы принимать ВСЕ символы, включая символы новой строки?
PHP Regex Любой персонаж
Ответ 1
Это обычно используется для захвата всех символов:
[\s\S]
Вы можете использовать любую другую комбинацию "Type-X + Non-Type-X" следующим образом:
[\d\D]
[\w\W]
но [\s\S]
распознается по соглашению как сокращенное обозначение "действительно что-либо".
Вы также можете использовать .
, если вы переключите регулярное выражение в режим "dotall" (a.k.a. "single-line" ) с помощью модификатора "s"
. Иногда это не жизнеспособное решение (динамическое регулярное выражение в черном ящике, например, или если вы не хотите изменять все регулярное выражение). В таких случаях другие альтернативы делают то же самое, независимо от того, как настроено регулярное выражение.
Ответ 2
Это символ .
, который означает "каждый символ" ( редактировать: отредактирован OP). И вам нужно добавить параметр s в ваше регулярное выражение, например:
preg_match("`(.+)`s", "\n");
Ответ 3
будет
[.\n]+
не работает?
Как насчет (.|\n)+
? Я тестировал его и, похоже, работал.
Я уверен, что это буквальная интерпретация именно того, что вы просите.
Ответ 4
Руководство по PHP для Dot утверждает, что:
Если установлена опция PCRE_DOTALL, то точки также совпадают с символами новой строки.
Ответ 5
Здесь важная вещь отсутствует. [\s\S]
соответствует одному символу, тогда как новая строка может быть символьной последовательностью. (Windows использует два символа: \r\n
.) Ни .
(с DOT_ALL модификатор), ни [\s\S]
не будет соответствовать последовательности новой строки. Лучший способ сопоставить любой символ или любую новую строку - (.|\R)
, "все, кроме новой строки или новой строки". \R
соответствует \n
, \R
и \r\n
.