Php 结构\H、\V和\N是什么意思?

Php 结构\H、\V和\N是什么意思?,php,regex,java-8,pcre,Php,Regex,Java 8,Pcre,下面的构造没有很好的文档记录,但它们在PHP以后的特定版本中确实可以工作;这些版本是什么,这些构造是什么,还有哪些其他实现支持这一点 \H \V \N 此线程是。\H匹配任何非水平空白的内容。这包括制表符和所有“空格分隔符”Unicode字符。这与: [^\h]或 [^\t\p{Zs}] \V是\V的否定类-它被命名为“非垂直空白字符”,与任何在Unicode标准中被视为换行符的字符中不是垂直空白字符的字符相匹配,并且将由\V匹配,与Perl 5中引入的以下字符相同: [^\v]或 [^\

下面的构造没有很好的文档记录,但它们在PHP以后的特定版本中确实可以工作;这些版本是什么,这些构造是什么,还有哪些其他实现支持这一点

  • \H
  • \V
  • \N


此线程是。

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

[^\h]或
[^\t\p{Zs}]
\V
\V
的否定类-它被命名为“非垂直空白字符”,与任何在Unicode标准中被视为换行符的字符中不是垂直空白字符的字符相匹配,并且将由
\V
匹配,与Perl 5中引入的以下字符相同:

[^\v]或
[^\n\cK\f\r\x85\x{2028}\x{2029}]
\N
匹配任何非换行符的字符
\N
。简单

[^\n]
\V+
\N+
之间有什么区别?谢谢您的提问。 正如文档中指定的Perl 5.10一样,
\V
[^\n\cK\f\r\x85\x{2028}\x{2029}]
相同,并且不应与
\n
/strong>或
\f以及
中的任何一项匹配,和

当您想要匹配水平文本中的所有内容-
\V+
-或仅使用整个段落-
\N+
-以及各种其他用例时,这些字符类非常方便且非常有效


以下实现支持
\H
\V
\N

  • Perl 5.10
  • PCRE 7.2
  • PHP程序员可能会发现支持这些结构的版本之间存在差异。由于它们来自Perl5,因此必须设置PCRE版本;您可以使用。默认情况下,PHP5.2.2不会
  • 作为实现
    \H
    的一部分,添加了对
    \H
    \V
    构造的支持,
    \V
    ,但还不支持
    \N

@AvinashRaj Perl 5.10和PCRE 7.2早在2007年6月就发布了这个“新特性”,PHP早在2007年11月就实现了PCRE 7.2作为默认支持。Java 8早在2013年就发布了这个“新特性”!我相信Perl 5.10中的
\N
构造名为Unicode字符。因此错误是
\N@sln Yes,实际上
\N
当单独使用或与星号一样的量词一起使用时,它是
\N
的否定:。但是
\N{}
命名构造在Java中不受支持,因此
\N
本身也没有实现,如果我明白你的意思的话?我说的是Perl 5.10。它抛出的实际错误是在正则表达式中的{}上缺少大括号;标记为@sln谢谢,已验证,我将很快更新参考和此线程以反映这一点。真不敢相信,我在测试中遗漏了Perl。谢谢你指出这一点!看起来这种行为依赖于pcre。