Следующие конструкции недостаточно хорошо документированы, но они работают с конкретными версиями PHP и выше; Какие это версии, что это за конструкции и какие другие реализации поддерживают это?
\H
\V
\N
Эта тема является частью Справочник по регулярному выражению переполнения стека.
\H
соответствует всему, что не является горизонтальным пробелом. Это включает в себя символ табуляции и все символы Unicode «разделитель пробела». Это так же, как:
[^\h] or
[^\t\p{Zs}]
\V
это отрицательный класс \v
— Он называется «не вертикальный символ пробела» и соответствует любым символам, которые не являются вертикальными символами пробела из тех, которые рассматриваются как разрывы строк в стандарте Unicode и будут соответствовать \v
и то же самое, что и представленное в Perl 5:
[^\v] or
[^\n\cK\f\r\x85\x{2028}\x{2029}]
\N
соответствует любым символам, которые не являются символом перевода строки \n
, Просто!
[^\n]
\V+
а также \N+
?Благодаря Авинаш Радж за вопрос.Как указано в документации Perl 5.10, \V
такой же как [^\n\cK\f\r\x85\x{2028}\x{2029}]
и не должен совпадать ни с одним из \n
, \r
или же \f
, так же как Ctrl+(Control char)
(* Никс), 0x85
, 0x2028
а также 0x2029
.
Эти классы символов удобны и невероятно эффективны, когда вы хотите сопоставить все в горизонтальном тексте — \V+
— или просто потребляя весь абзац — \N+
— среди различных других вариантов использования.
Следующие реализации поддерживают \H
, \V
а также \N
:
phpinfo()
. По умолчанию PHP 5.2.2 делает.java.util.regex.Pattern
Поддержка для \H
а также \V
конструкции были добавлены как часть реализации \h
, \v
, который был не верно для Java 7, тем не мение \N
пока не поддерживается. Протестировано с JDK8u25.Других решений пока нет …