5

我正在尝试匹配这个字符串:

文字 18 19 文字

使用这个正则表达式:

\s+\d\d\s+

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

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

我在这里用这个测试仪进行测试:http: //java-regex-tester.appspot.com/

谢谢!

4

3 回答 3

8

您不匹配第二个项目的原因是18和之间的空间被第一个匹配项的尾随19消耗\s+。您应该为尾随空白创建一个不消耗的零宽度正则表达式,例如通过使用前瞻语法或零宽度边界的标记:

\s+\d\d(?=\s+)
于 2012-11-11T11:11:02.160 回答
5

改用这个:

\b\d\d\b

您的正则表达式与第二个数字不匹配,因为第一个匹配已经“吃掉”了所有空格。

同时,\b是一个“单词边界”,也就是所谓的零宽度(元)字符:它在匹配时不会“吃掉”任何东西。

于 2012-11-11T11:10:49.667 回答
3

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

于 2012-11-11T11:10:53.097 回答