/'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
(。