You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Matcher matches()方法匹配异常:正则匹配含空格字符串结果不符

问题根源与解决方案

问题出在哪?

你用的.*?是惰性匹配,但它会匹配除换行外的任意字符(包括空格)。因为matches()要求完全匹配整个字符串,惰性匹配会被迫扩展到最后一个},把中间的空格也包含进单个{!...}分组里——相当于把{!expression1} {!expression2}当成了一个{!expression1} {!expression2}的表达式,所以返回true。

怎么解决?

把.*?换成[^}]+,这个表达式只会匹配除}之外的任意字符,能精准限定每个{!someExpression}的边界,不会把中间的空格或其他无关字符包含进去。

修改后的正则代码:

Pattern.compile("(\\{!([^}]+)\\})+").matcher("{!expression1} {!expression2}").matches()

测试验证

  • 输入{!expression1}{!expression2}:返回true(符合多个连续表达式的需求)
  • 输入{!expression1} {!expression2}:返回false(符合你的预期)
  • 输入{!singleExpression}:返回true(单个表达式也支持)

如果后续需要允许表达式之间有特定分隔符(比如逗号),可以在分组间添加对应规则,比如(\\{!([^}]+)\\})(?:,(\\{!([^}]+)\\}))*,按需调整即可。

内容的提问来源于stack exchange,提问作者Rahul Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:31:16