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

Regex匹配问题求助:Pattern.matches始终返回false

问题解决:正则匹配返回false的原因及修正

核心问题

你使用的Pattern.matches()方法要求整个字符串完全匹配正则表达式,但你的目标只是检查字符串中是否包含*[数字]这类片段,因此直接调用该方法必然返回false——你的Description字段内容远不止目标匹配段。

另外,虽然你的正则(\\*\\[\\d+\\])能匹配*[151]片段,但受限于matches()的特性,只有当整个字符串和正则完全一致时才会返回true。

修正代码

改用Pattern.compile()配合Matcher.find()来检查字符串中是否存在目标匹配片段,这是更符合需求的写法:

Case ca = [Select Id, Description, Subject from Case Where Id='500DP00000HSWwnYAH'];
Pattern p = Pattern.compile('\\*\\[\\d+\\]');
Matcher m = p.matcher(ca.Description);
Boolean TestMatch = m.find();
system.debug('TEST Regex '+TestMatch);

如果一定要使用Pattern.matches(),可以给正则前后加上通配符,并开启DOTALL模式让.匹配换行符(覆盖Description中的换行和空格):

Boolean TestMatch = Pattern.matches('(?s).*\\*\\[\\d+\\].*', ca.Description);

额外优化

  • 正则中的括号()是分组语法,此处无需分组可以直接去掉,不影响匹配效果。
  • 若需要提取[]内的数字,可以给\\d+添加分组,通过group()方法获取:
Pattern p = Pattern.compile('\\*\\[(\\d+)\\]');
Matcher m = p.matcher(ca.Description);
if(m.find()){
    String targetNum = m.group(1);
    system.debug('提取的数字:'+targetNum); // 输出151
}

内容的提问来源于stack exchange,提问作者saheb shaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:07:14