Php 这个正则表达式是什么意思?

Php 这个正则表达式是什么意思?,php,regex,Php,Regex,我想这意味着 新线 后跟0或更多空格 然后是一条新的线路 这是正确的吗?如果没有,你能解释一下吗?错了\s是任何空白字符,而不仅仅是空格。几乎正确:\s实际上意味着“任何空白字符”,它还包括制表符和可能的CR/LF(\r和\n) 如果您使用的是perl,\s也可能与以下字符匹配: 如果Unicode有效,“\s”还匹配“\x{85}”、“\x{2028}”和“\x{2029}” 还有一些澄清 因为匹配没有锚定(^开头或$结尾),所以大多数引擎将此表达式视为字符串可以匹配字符串中的任何位置。

我想这意味着

  • 新线
  • 后跟0或更多空格
  • 然后是一条新的线路

这是正确的吗?如果没有,你能解释一下吗?

错了
\s
是任何空白字符,而不仅仅是空格。

几乎正确:
\s
实际上意味着“任何空白字符”,它还包括制表符和可能的CR/LF(
\r
\n

如果您使用的是perl,
\s
也可能与以下字符匹配:

如果Unicode有效,“\s”还匹配“\x{85}”、“\x{2028}”和“\x{2029}”

还有一些澄清

  • 因为匹配没有锚定(
    ^
    开头或
    $
    结尾),所以大多数引擎将此表达式视为字符串可以匹配字符串中的任何位置。换句话说,regex
    /cat/
    将匹配“cat”、“caterpillar”或“concatenate”“。因此,字符串需要包含所描述的内容,但可以用任何其他内容作为前缀或后缀
  • 末尾的
    /s
    通常意味着将整个字符串视为一条巨线。同样,来自perlre:
将字符串视为单行。也就是说,将“.”更改为匹配任何字符,即使是换行符,通常都不匹配

“/s”和“/m”修饰符都覆盖$*设置。也就是说,无论$*包含什么内容,不带“/m”的“/s”将强制“^”仅在字符串的开头匹配,“$”仅在字符串的结尾(或结尾的换行符之前)匹配。作为/ms,它们一起允许“.”匹配任何字符,同时仍然允许“^”和“$”分别匹配字符串中换行符之后和之前的字符


你的假设基本上是正确的,只做了一处修改,一处遗漏

首先,正如其他人所说,
\s
表示任何空格,而不仅仅是“空格”


此外,尾随的
s
表示正则表达式处于“单行模式”,这意味着
(点)将匹配换行符。换句话说,无论是否有换行符(它们将显示为另一个特殊字符,如
\n
\r
),传递到此正则表达式的任何内容都将被解析为一行输入。

您使用的正则表达式解析器是什么?哪种语言和/或哪种库?你可能想添加一些标签。@Roalt,我已经有了PHP标签,但我想有人把它删除了。将重新添加。如果您也在使用php,请格外小心bug:
/\n\s*\n/s