这个正则表达式意味着什么?

时间:2011-05-27 17:27:13

标签: php regex

/\n\s*\n/s

我认为这意味着

  • 新行
  • 后跟0或更多空格
  • 然后换行

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

3 个答案:

答案 0 :(得分: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一起,他们让“。”匹配任何字符,同时仍允许“^”和“$”分别匹配字符串中的换行符之后和之前。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你的假设大多是正确的,只有一个改变和一个遗漏。

首先,正如其他人所说,\s意味着任何空白,而不仅仅是“空间”。

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