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