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


What does this regex mean?

/'n's*'n/s

我认为这意味着

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

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

几乎正确:'s实际上意味着"任何空白字符",其中还包括制表符,可能还有CR/LF('r'n(。

如果您正在使用perl,'s可能也会匹配其他一些字符(来自perlre(:

如果Unicode有效,"''s"还会匹配"''x{85}"、"''x{2028}"answers"''x ''2029}">

还有几点澄清。

  • 因为匹配没有锚定(^在开头,$在结尾(,所以大多数引擎都将此表达式视为字符串可以与字符串中的ANYWHERE匹配。换句话说,正则表达式/cat/将匹配"cat"、"catillar"或"concatenate"。因此,您的字符串需要包含您所描述的内容,但可以使用其他任何内容作为前缀或后缀
  • 末尾的/s通常意味着将整个字符串视为一条巨线。再次,来自perlre:

将字符串视为单行。也就是说,更改"."以匹配任何字符,甚至是换行符,而这通常是不匹配的。

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

错误。's是任何空白字符,而不仅仅是空格。

您的假设基本上是正确的,只做了一次更改和一次省略。

首先,正如其他人所说,'s意味着任何空白,而不仅仅是"一个空间">

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