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

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

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

 [\s\S] 

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

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

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

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

Это и есть . символ, означающий «каждый символ» ( отредактировано : ОР отредактировано). И вам нужно добавить параметр s в regexp, например:

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

бы

 [.\n]+ 

не работа?

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

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

На странице PHP Manual для Dot указано, что:

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

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