构造\ H,\ V和\ N是什么意思?

时间:2014-11-17 12:25:31

标签: php regex java-8 pcre

以下结构没有很好的文档记录,但它们的确适用于PHP的特定版本;这些版本是什么,这些构造是什么以及哪些其他实现支持这个?

  • \H
  • \V
  • \N

此主题是The Stack Overflow Regex Reference的一部分。

1 个答案:

答案 0 :(得分:24)

\H匹配任何不是水平空格的内容。这包括制表符和所有"空格分隔符" Unicode字符。这与:

相同
[^\h] or
[^\t\p{Zs}]

\V\v的否定类 - 它被命名为&#34;非垂直空白字符&#34;并匹配任何字符,这些字符不是在Unicode标准中被视为换行符的垂直空白字符,并且将与\v匹配,并且与Perl 5中引入的以下内容相同:< / p>

[^\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) (* nix),0x850x20280x2029

当您希望匹配水平文本中的所有内容时,这些角色类非常有用且非常有效 - \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的一部分,not true for Java 7,但是\N尚不支持。 Tested with JDK8u25.