关于数字和空格的正则表达式

时间:2015-05-03 09:23:32

标签: regex

我试图匹配空格包围的数字,比如这个字符串: " 1 2 3"

我很困惑为什么正则表达式\s[0-9]\s匹配1和3而不是2.为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

更确切地说,只有当您逐个浏览字符串\s[0-9]\s中的所有匹配项时,正则表达式2才会与" 1 2 3 "不匹配。如果您尝试在第1或第2位开始匹配," 2 "将匹配。

原因是\s正在捕获输入的一部分 - 即数字周围的空格。当您匹配" 1 "时,12之间的空格已被占用;正则表达式引擎正在查看字符串的尾部,即"2 3 "。此时,2前面没有引擎可以捕获的空间,因此直接找到" 3 "

要解决此问题,请将空格放入零长度look-arounds,如下所示:

(?<=\s)[0-9](?=\s)

现在引擎确保数字前后有空格,而消耗这些空格作为匹配的一部分。这样,引擎就可以将12之间的空格视为1后面的空格,也可以将2前面的空格视为空格,从而返回两个匹配项。