我正在尝试匹配这个字符串:
文字 18 19 文字
使用这个正则表达式:
\s+\d\d\s+
该字符串有两个数字,每个数字都由前导空格和尾随空格包围。
所以我在想 - 这应该给我 18 和 19 对吗?它没有,它只给了我18个。
我在这里用这个测试仪进行测试:http: //java-regex-tester.appspot.com/
谢谢!
我正在尝试匹配这个字符串:
文字 18 19 文字
使用这个正则表达式:
\s+\d\d\s+
该字符串有两个数字,每个数字都由前导空格和尾随空格包围。
所以我在想 - 这应该给我 18 和 19 对吗?它没有,它只给了我18个。
我在这里用这个测试仪进行测试:http: //java-regex-tester.appspot.com/
谢谢!
您不匹配第二个项目的原因是18
和之间的空间被第一个匹配项的尾随19
所消耗\s+
。您应该为尾随空白创建一个不消耗的零宽度正则表达式,例如通过使用前瞻语法或零宽度边界的标记:
\s+\d\d(?=\s+)
改用这个:
\b\d\d\b
您的正则表达式与第二个数字不匹配,因为第一个匹配已经“吃掉”了所有空格。
同时,\b
是一个“单词边界”,也就是所谓的零宽度(元)字符:它在匹配时不会“吃掉”任何东西。
因为首先解析输出到“18”,剩余的字符串是“19 Text”,这是不匹配的。