Что означают конструкции \ H, \ V и \ N?

Следующие конструкции плохо документированы, но они работают с определенными версиями PHP; Каковы эти версии, каковы эти конструкции и какие другие реализации поддерживают это?

  • \H
  • \V
  • \N

Этот поток является частью справочного руководства по переполнению стека .

Related of "Что означают конструкции \ 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 :

  • Perl 5.10
  • PCRE 7.2
  • PHP-программисты могут найти расхождение в отношении того, какие версии поддерживают эти конструкции. Поскольку они пришли из Perl 5, нужно установить версию PCRE; Вы можете проверить это, используя phpinfo() . По умолчанию используется PHP 5.2.2.
  • Поддержка Java 8 java.util.regex.Pattern для конструкций \H и \V добавлена ​​как часть реализации \h , \v , что не соответствует действительности для Java 7 , однако \N еще не поддерживается. Протестировано с помощью JDK8u25.