正则表达式困惑:\s 和 " " 的区别

5
在正则表达式中,我知道使用\s来表示空格,但在以下情况下,它们会有所不同:
  1. /a\sb/ --- 使用 \s
  2. /a b/ --- 使用空格
如果你能为我解释一下就太感谢了。

你正在使用的正则表达式引擎非常重要。 - Paul
在现代正则表达式中,\s 表示空格,而不是 /s - kev
在大多数情况下,它匹配任何空白字符,而不仅仅是空格,但并非全部。 - Paul
我的错,我已经改成\s了。我的意思是\s和“一个真正的空格”是否不同。我知道这是一个奇怪的问题,但它仍然让我很困扰。 - rain zwr
1个回答

15
\s 字符类匹配所有的“空白字符”,不仅限于空格。这包括制表符 (\t),如果允许多行匹配,它还包括回车符 (\r) 和换行符 (\n)。理论上,如果你的正则表达式引擎处理 Unicode,\s 还可以匹配 Unicode 空白字符,但是实际效果可能会有所不同。
因此,对于字符串 "a\t b",您可以使用正则表达式 /a\s+b/ 进行匹配,如果这对您有用的话。

1
一个有用的 PHP 代码片段,可以将所有“空格字符”,包括多个空格,替换为单个空格: $str = preg_replace('/\s+/', ' ', $str); - Richard

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