Java String 方法 matches的正则表达式使用不生效的问题以及解决办法同时解决正则匹配正常,String匹配matches不正常的情况

Java String 方法 matches的正则表达式使用不生效的问题以及解决办法同时解决正则匹配正常,String匹配matches不正常的情况

1、遇到的问题解析说明:

boolean matches(String regex):

matches() 方法用于检测字符串是否全量匹配给定的正则表达式。

案例1--为什么不匹配?

public static void main(String[] args) {

String content = "何士宗两任温州知州?--<宋史·五行志>纠误伦港通";

String regex = ".*MSCI|沪港通|深港通|伦港通|上证50|沪深300|中证500|港股通.*";

if (content.matches(regex)) {

System.out.println("正则匹配成功!");

}

System.out.println("正则匹配失败!");

}

运行结果:

正则匹配失败!

可是使用正则

public static void main(String[] args) {

String content = "何士宗两任温州知州?--<宋史·五行志>纠误伦港通 ";

String regex = ".*MSCI|沪港通|深港通|伦港通|上证50|沪深300|中证500|港股通.*";

System.out.println(isPattern( content, regex));

}

public static Boolean isPattern(String content, String regex) {

Pattern pa = Pattern.compile(regex, Pattern.DOTALL);

Matcher ma = pa.matcher(content);

if (ma.find()) {

return true;

}

return false;

}

这个运行结果是:

true

2、为啥子运行结果不一样,要避免一个坑,

主要是final String的类里面的matchs是全量匹配,意味着正则表达式是要考虑全面匹配全量,这样才可以正常的使用。修改方案如下:

public static void main(String[] args) {

String content = "何士宗两任温州知州?--<宋史·五行志>纠误伦港通";

String regex = ".*(MSCI|沪港通|深港通|伦港通|上证50|沪深300|中证500|港股通).*";

if (content.matches(regex)) {

System.out.println("正则匹配成功!");

}

System.out.println("正则匹配失败!");

}

运行结果就正常了:

正则匹配成功!

正则匹配失败!

3、发生原因

我这边使用的是java,连接平台那边使用的groovy脚本,可配置化,我这边使用的正则工具类,他那边使用的String的自带方法,今天我联调他的校验服务,奇怪的是我这边可以,他那边异常,搞得昨天一天都没找到原因,现在好了,找到原因就可以直接的解决了,问题不大!

值得思考,吸取教训经验,祝你成长!

相关推荐