\ s +不匹配所有空格?

Dav*_*vid 5 java regex

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

文字18 19文字

有了这个正则表达式:

\s+\d\d\s+
Run Code Online (Sandbox Code Playgroud)

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

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

我在这里测试这个测试器:http://java-regex-tester.appspot.com/

谢谢!

das*_*ght 8

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

\s+\d\d(?=\s+)
Run Code Online (Sandbox Code Playgroud)


And*_*ong 5

请改用:

\b\d\d\b
Run Code Online (Sandbox Code Playgroud)

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

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