在PHP中用\ s匹配的空格是什么?

时间:2011-03-29 11:17:07

标签: php regex

PHP中的转义序列 \ s 匹配的完整字符列表是什么? 一些正则表达式包括垂直空间和此转义序列中的其他字符。

3 个答案:

答案 0 :(得分:3)

PHP仅对水平空白字符\hhttp://www.php.net/manual/en/regexp.reference.escape.php

根据http://www.pcre.org/pcre.txt

  

为了与Perl兼容,\ s与VT字符(代码不匹配)匹配          11)。这使它与POSIX“space”类不同。 \ s          字符是HT(9),LF(10),FF(12),CR(13)和空格(32)。如果          “使用locale;”包含在Perl脚本中,\ s可能与VT字符匹配 -          之三。在PCRE中,它永远不会。

因此,如果“垂直空间”指垂直制表符,则答案为否。

The  sequences  \h, \H, \v, and \V are features that were added to Perl
at release 5.10. In contrast to the other sequences, which  match  only
ASCII  characters  by  default,  these always match certain high-valued
codepoints in UTF-8 mode, whether or not PCRE_UCP is set.

The  horizontal space characters are:

         U+0009     Horizontal tab
         U+0020     Space
         U+00A0     Non-break space
         U+1680     Ogham space mark
         U+180E     Mongolian vowel separator
         U+2000     En quad
         U+2001     Em quad
         U+2002     En space
         U+2003     Em space
         U+2004     Three-per-em space
         U+2005     Four-per-em space
         U+2006     Six-per-em space
         U+2007     Figure space
         U+2008     Punctuation space
         U+2009     Thin space
         U+200A     Hair space
         U+202F     Narrow no-break space
         U+205F     Medium mathematical space
         U+3000     Ideographic space

The vertical space characters are:

         U+000A     Linefeed
         U+000B     Vertical tab
         U+000C     Formfeed
         U+000D     Carriage return
         U+0085     Next line
         U+2028     Line separator
         U+2029     Paragraph separator

答案 1 :(得分:3)

来自pcrepattern specifications页面:

  

通用字符类型

\s     any white space character
     

为了与Perl兼容,\ s不用于匹配VT字符   (代码11),它使它与POSIX“space”类不同。   然而,Perl在5.18版本中添加了VT,并且PCRE紧随其后   发布8.34。默认的\ s字符现在是HT(9),LF(10),VT   (11),FF(12),CR(13)和空间(32),它们被定义为白色   “C”语言环境中的空格。如果区域设置特定,此列表可能会有所不同   正在进行匹配。例如,在某些语言环境中   “非破碎空间”字符(\ xA0)被识别为空白区域,   在其他人中,VT角色不是。

所以\s将匹配5个字符加上更多,具体取决于:

  1. PCRE库版本
  2. 区域设置
  3. This test比较各种版本的PHP中preg_match的结果。

答案 2 :(得分:1)

来自http://www.pcre.org/pcre.txt

  

\ s \ p {Z}匹配的任何字符,   加上HT,LF,FF,CR