\ s +不匹配所有空格?

时间:2012-11-11 11:08:30

标签: java regex

我正在尝试匹配此字符串:

  

文字18 19文字

这个正则表达式:

\s+\d\d\s+

该字符串有两个数字,每个数字都由一个前导空格和一个尾随空格包围。

所以我在想 - 这应该给我18和19对吗? 它没有,它只给我18个。

我正在测试此测试器:http://java-regex-tester.appspot.com/

谢谢!

3 个答案:

答案 0 :(得分:8)

您与第二项不匹配的原因是,1819之间的空格消耗第一场比赛的尾随\s+ 。您应该为尾随空白创建一个非消耗零宽度的正则表达式,例如使用先行语法或零宽度边界的标记:

\s+\d\d(?=\s+)

答案 1 :(得分:5)

请改用:

\b\d\d\b

你的正则表达式与第二个数字不匹配,因为第一个匹配已经" eaten up"所有空间。

同时,\b是一个"字边界,"而且所谓的零宽度(元)字符:它并没有“吃掉”#34;什么都匹配。

答案 2 :(得分:3)

因为首先将输出解析为“18”而剩余的字符串是“19 Text”,这是不匹配的。