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

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

  • \H
  • \V
  • \N

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

1 ответ

Решение

\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+? Спасибо Avinash Raj за вопрос.

Как указано в документации 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:

  • 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.
Другие вопросы по тегам