Следующие конструкции плохо документированы, но они работают с определенными версиями 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
. Просто!
[^\n]
\V+
и \N+
? Спасибо Авинашу Радж за вопрос. Как указано в документации Perl 5.10, \V
совпадает с [^\n\cK\f\r\x85\x{2028}\x{2029}]
и не должно совпадать с \n
, \r
или \f
, а также Ctrl+(Control char)
(* nix), 0x2028
, 0x2028
и 0x2029
.
Эти классы символов удобны и невероятно эффективны, если вы хотите совместить все в горизонтальном тексте – \V+
– или просто потреблять целый абзац – \N+
– среди других других вариантов использования.
Следующие реализации поддерживают \H
, \V
и \N
:
phpinfo()
. По умолчанию используется PHP 5.2.2. java.util.regex.Pattern
для конструкций \H
и \V
добавлена как часть реализации \h
, \v
, что не соответствует действительности для Java 7 , однако \N
еще не поддерживается. Протестировано с помощью JDK8u25.