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

3
/\n\s*\n/s

我认为它的意思是

  • 一个新行
  • 紧接着0个或多个空格
  • 然后是另一行

这样正确吗?如果不是,你可以解释一下吗?


你正在使用哪个正则表达式解析器?用于哪种语言和/或哪个库?你可能想添加一些相关的标签。 - Roalt
@Roalt,我已经打了PHP的标签,但我猜想有人把它删除了。我会重新添加它。 - sameold
3个回答

8
几乎正确:\s 实际上意味着“任何空白字符”,包括制表符和可能的 CR/LF(\r\n)。
如果您使用 perl,则 \s 也可能匹配其他一些字符(来自 perlre):
如果启用了 Unicode,则 "\s" 还会匹配 "\x{85}"、"\x{2028}" 和 "\x{2029}"。
还有一些澄清。
- 因为匹配没有锚定(在开头的 ^ 或在结尾的 $),大多数引擎将此表达式视为字符串可以匹配到字符串中的任何位置。换句话说,正则表达式 /cat/ 将匹配 "cat"、"caterpillar" 或 "concatenate"。因此,您的字符串需要包含您描述的内容,但可以由其他任何内容前缀或后缀。 - 结尾的 /s 通常意味着将整个字符串视为一个巨大的行。同样来自 perlre:
将字符串视为单行。也就是说,将 "." 更改为匹配任何字符,甚至是换行符,它通常不会匹配。
"/s" 和 "/m" 修饰符都会覆盖 $* 设置。也就是说,无论 $* 包含什么,没有 "/m" 的 "/s" 都将强制 "^" 仅在字符串开头匹配,"$" 仅在字符串结尾(或在结尾的换行符之前)匹配。一起使用时,作为 /ms,它们允许 "." 匹配任何字符,同时仍然允许 "^" 和 "$" 分别匹配字符串内部换行符之后和之前的任何字符。

如果你正在使用PHP,那么一定要非常小心关于错误的问题:http://core.trac.wordpress.org/ticket/11528 - Denis de Bernardy

1

不对。 \s 包括任何空白字符,而不仅仅是空格。


1

你的假设大部分是正确的,只有一个更改和一个省略。

首先,正如其他人所说,\s 表示任何空白字符,而不仅仅是 "空格"。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接