以下结构没有很好的文档说明,但在特定版本的PHP中确实可以工作;这些版本是哪些,这些结构是什么,还有哪些实现支持它们?
\H
\V
\N
本帖子是Stack Overflow正则表达式参考资料的一部分。
以下结构没有很好的文档说明,但在特定版本的PHP中确实可以工作;这些版本是哪些,这些结构是什么,还有哪些实现支持它们?
\H
\V
\N
本帖子是Stack Overflow正则表达式参考资料的一部分。
\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)
(*nix)、0x85
、0x2028
和0x2029
。
这些字符类对于想要匹配水平文本内的所有内容-\V+
,或者仅仅消耗整个段落-\N+
-以及其他各种用例非常方便且非常有效。
以下实现支持\H
、\V
和\N
:
phpinfo()
检查此内容。默认情况下,PHP 5.2.2不支持。java.util.regex.Pattern
支持\H
和\V
构造的添加作为实现\h
、\v
的一部分,这在Java 7中并不是真的,但是\N
尚未得到支持。已使用JDK8u25进行测试。
\N
结构被称为Unicode字符。因此错误是\N <-- 缺少命名的Unicode字符
,其格式为\N{..}
。 - user557597Missing braces on \N{} in regex; marked by <-- HERE in m/\N <-- HERE
,其中正则表达式为/\N+/
,如果它自己使用应该只匹配N
,如果它在结构上有重复,并且量词不重要。 - user557597\N
(?:{..})?`,但这并不是在5.10版本中进行的更改。在5.10-5.20之间是一个过渡阶段,之后是6.0版本,而且不稳定。他们永远无法做到完美,因为6.0版本的目标几乎是无法实现的。在我看来,5.10版本是最后一个稳定版本,因为他们试图挤出可用的最后一滴构造。这真是一个悲哀的状态。 - user557597