【问题标题】:What are the whitespaces matched by \s in PHP?PHP中\s匹配的空格是什么?
【发布时间】:2015-03-10 16:19:06
【问题描述】:

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

【问题讨论】:

    标签: php regex


    【解决方案1】:

    来自pcrepattern specifications页面:

    通用字符类型

    \s     any white space character
    

    为了与 Perl 兼容,\s 没有用来匹配 VT 字符 (代码 11),这使它与 POSIX “空间”类不同。 然而,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. 区域设置

    This test 比较不同 PHP 版本的 preg_match 的结果。

    【讨论】:

    • 我也到这里搜索列表。但是页面可能已经改变。以下是列表: \s 匹配的空格仅表示这 5 个字符:9 = 0x09 = 水平制表符,10 = 0x0A = 换行,12 = 0x0C = 换页,13 = 0x0D = 回车,32 = 0x20 = 空格, php.net/manual/en/regexp.reference.escape.php
    【解决方案2】:

    PHP 有 \h 仅用于水平空白字符:http://www.php.net/manual/en/regexp.reference.escape.php

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

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

    所以如果“垂直空格”是指垂直制表符,答案是否定的。

    序列 \h、\H、\v 和 \V 是添加到 Perl 的功能 在 5.10 版中。与其他仅匹配的序列相反 默认情况下 ASCII 字符,这些总是匹配某些高值 UTF-8 模式下的代码点,无论是否设置了 PCRE_UCP。 水平空格字符为: U+0009 水平制表符 U+0020 空格 U+00A0 不间断空格 U+1680 欧格姆空格标记 U+180E 蒙古语元音分隔符 U+2000 恩四边形 U+2001 Em 四边形 U+2002 恩空间 U+2003 Em 空间 U+2004 每 em 三个空间 U+2005 四个每 em 空间 U+2006 六人制空间 U+2007 图空间 U+2008 标点空格 U+2009 薄空间 U+200A 头发空间 U+202F 狭窄的不间断空间 U+205F 中等数学空间 U+3000 表意空间 垂直空格字符是: U+000A 换行 U+000B 垂直制表符 U+000C 换页 U+000D 回车 U+0085 下一行 U+2028 行分隔符 U+2029 段落分隔符

    【讨论】:

    • 好吧,pcre.org/pcre.txt 说它与垂直制表符不匹配 - 我不知道垂直空间是什么。
    • 什么是水平空白字符?
    • @Stephan - 我只是wandering the same question。在pcre.org/pcre.txt 文件中搜索"The sequences \h, \H, \v, and \V"\h 可能更适合你,这取决于你的需要。
    • 我已经用水平和垂直字符列表编辑了你的帖子。
    【解决方案3】:

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

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

    【讨论】:

    • 虽然引用正确,但这取决于编译时设置。 PHP 在该代码周围使用#ifdef PCRE_UCP。不应该依赖它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2011-05-31
    • 2015-08-30
    • 2011-09-12
    • 2012-07-22
    • 2012-09-01
    相关资源
    最近更新 更多