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的自带方法,今天我联调他的校验服务,奇怪的是我这边可以,他那边异常,搞得昨天一天都没找到原因,现在好了,找到原因就可以直接的解决了,问题不大!
值得思考,吸取教训经验,祝你成长!