字边界上的正则表达式匹配或非数字

Mic*_*ryl 4 regex word-boundary word-boundaries

我正在尝试使用正则表达式模式(在Java中)来查找3位数的序列,并且连续只有3位数.4位数不匹配,2位数不匹配.

对我来说,显而易见的模式是:

"\b(\d{3})\b"
Run Code Online (Sandbox Code Playgroud)

这与许多源字符串案例相匹配,例如:

">123<"
" 123-"
"123"
Run Code Online (Sandbox Code Playgroud)

但它不会与源字符串"abc123def"匹配,因为c/1边界和3/d边界不算作\ b类所期望的"字边界"匹配.

我本来期望解决方案是添加一个包含非数字(\ D)和字边界(\ b)的字符类.但这似乎是非法语法.

"[\b\D](\d{3})[\b\D]"
Run Code Online (Sandbox Code Playgroud)

有没有人知道我可以使用什么作为一个表达式来提取"123"的源字符串情况,如:

"abc123def"
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.是的,我意识到在Java中必须双重转义代码,如\ b到\ b,但这不是我的问题,我不想将此限制为Java人员.

anu*_*ava 9

你应该对这些情况使用lookarounds:

(?<!\d)(\d{3})(?!\d)
Run Code Online (Sandbox Code Playgroud)

这意味着匹配3个未跟随且前面有数字的数字.

工作演示