我正在尝试匹配此字符串:
文字18 19文字
这个正则表达式:
\s+\d\d\s+
该字符串有两个数字,每个数字都由一个前导空格和一个尾随空格包围。
所以我在想 - 这应该给我18和19对吗? 它没有,它只给我18个。
我正在测试此测试器:http://java-regex-tester.appspot.com/
谢谢!
答案 0 :(得分:8)
您与第二项不匹配的原因是,18
与19
之间的空格消耗第一场比赛的尾随\s+
。您应该为尾随空白创建一个非消耗零宽度的正则表达式,例如使用先行语法或零宽度边界的标记:
\s+\d\d(?=\s+)
答案 1 :(得分:5)
请改用:
\b\d\d\b
你的正则表达式与第二个数字不匹配,因为第一个匹配已经" eaten up"所有空间。
同时,\b
是一个"字边界,"而且所谓的零宽度(元)字符:它并没有“吃掉”#34;什么都匹配。
答案 2 :(得分:3)
因为首先将输出解析为“18”而剩余的字符串是“19 Text”,这是不匹配的。