\s
по умолчанию будет не совпадать с пробельными символами со значениями, превышающими 128. Вместо этого вы можете использовать другие последовательности с поддержкой UTF-8.
(Стандартный отказ от ответственности: я скину исходный код PCRE для составления списков ниже, я могу пропустить символ или ввести что-то неправильно. Пожалуйста, прости меня.)
\p{Zs}
совпадений:
- U + 0020 Пробел
- U + 00A0 Пространство без перерывов
- U + 1680 Знак пробела Огама
- U + 180E Монгольский разделитель гласных
- U + 2000 En quad
- U + 2001 Em Quad
- U + 2002 En пробел
- U + 2003 Em пробел
- U + 2004 Пробел три на каждого
- U + 2005 Четырехместное пространство
- U + 2006 Пробел на шесть мест
- U + 2007 Пространство рисунка
- U + 2008 Пунктуация
- U + 2009 Тонкое пространство
- U + 200A Пространство для волос
- U + 202F Узкое пространство без перерывов
- U + 205F Среднее математическое пространство
- U + 3000 Идеографическое пространство
\h
(Горизонтальные пробелы) совпадает с \p{Zs}
выше, плюс
- U + 0009 Горизонтальная табуляция.
Аналогично для сопоставления вертикальных пробелов есть несколько вариантов.
\p{Zl}
соответствует разделителю U + 2028.
\p{Zp}
соответствует U + 2029 Разделитель абзацев.
\v
(вертикальный пробел) соответствует \p{Zl}
, \p{Zp}
и следующим
- U + 000A Linefeed
- U + 000B Вертикальная вкладка
- U + 000C Formfeed
- U + 000D Возврат каретки
- U + 0085 Следующая строка
Возвращаясь к началу, в режиме UTF-8 (т. Е. С использованием модификатора шаблона u
) \s
будет соответствовать любому символу, который соответствует \p{Z}
(что-либо, что \p{Zs}
, \p{Zl}
и \p{Zp}
будет соответствовать), плюс
- U + 0009 Горизонтальная табуляция
- U + 000A Linefeed
- U + 000C Formfeed
- U + 000D Возврат каретки
Короче говоря (я готов поспорить, что вы прочитали все вышеперечисленное, не так ли?), Вы можете использовать \s
, но убедитесь, что находитесь в режиме UTF-8, например /\s/u
. Если применить это на практике, чтобы отфильтровать те подходящие пробельные символы из строки, вы бы сделали что-то вроде
$new_string = preg_replace('/\s/u', '', $old_string);
Наконец, если вы действительно действительно заботитесь о вертикальных пробелах, которые не включены в \s
(LF и NEL), тогда вы можете использовать класс символов [\s\v]
, чтобы сопоставить все 26 из перечисленных выше пробельных символов.