Java 正则表达式 匹配英文字母

目录

语法:

匹配英文字母

要求:

使用*:

使用+:

使用+?:

总结:


在处理中,需要替换es查询语句的条件,要先进行匹配英文单词:

 

语法:

[abc]   表示字母abc中的任意一个

 

数量控制符

贪婪型

?        表示1个或0个。换句话说,表示要不然没有,要不然只有1个

*        表示0个或多个。

+       表示1个或多个。

{n}     表示正好n个

{n,m} 表示n到m个,这是一个左闭右闭区间

{n,}    表示至少n个

 

勉强型

相比于贪婪型,勉强型只是多了一个?:

??       表示1个或0个。换句话说,表示要不然没有,要不然只有1个

*?        表示0个或多个。

+?       表示1个或多个。

{n}?     表示正好n个

{n,m}? 表示n到m个,这是一个左闭右闭区间

{n,}?    表示至少n个

 

匹配英文字母

要求:

如何把

{"bool":{"must":[{"match":{"flow_name":"paramName"}}],"must_not":[{"term":{"reasonCode":157}}]}}

转换为:

 匹配里面的英文字母: bool,must等

 

使用*:

public static void main(String[] args) {
    String content = "{\"bool\":{\"must\":[{\"match\":{\"flow_name\":\"paramName\"}}],\"must_not\":[{\"term\":{\"reasonCode\":157}}]}}";
    System.out.println("============ * ============");
    String pattern = "([a-zA-Z_]*)";
    getMatchWord(content, pattern);
}

public static void getMatchWord(String content, String pattern)
{
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(content);
    while (m.find())
    {
        String group = m.group();
        System.out.println("group: "+group);
    }
}

部分结果:

============ * ============

group:

group:

group: bool

group:

group: must

group:

group:

group: match

group:

group:

因为*,从0开始,匹配到了空的情况,不符合目的

 

使用+:

public static void main(String[] args) {
    String content = "{\"bool\":{\"must\":[{\"match\":{\"flow_name\":\"paramName\"}}],\"must_not\":[{\"term\":{\"reasonCode\":157}}]}}";
    System.out.println("============ * ============");
    String pattern = "([a-zA-Z_]*)";
    System.out.println("============ + ============");
    pattern = "([a-zA-Z_]+)"; // 匹配单词
    getMatchWord(content, pattern);
}

结果:

============ + ============
group: bool
group: must
group: match
group: flow_name
group: paramName
group: must_not
group: term
group: reasonCode

目标达成

 

使用+?:

public static void main(String[] args) {
    String content = "{\"bool\":{\"must\":[{\"match\":{\"flow_name\":\"paramName\"}}],\"must_not\":[{\"term\":{\"reasonCode\":157}}]}}";
    System.out.println("============ * ============");
    String pattern = "([a-zA-Z_]*)";
    System.out.println("============ + ============");
    pattern = "([a-zA-Z_]+)"; // 匹配单词
    System.out.println("============ +? ============");
    pattern = "([a-zA-Z_]+?)"; // 匹配字母
    getMatchWord(content, pattern);
}

 

部分结果:

============ +? ============
group: b
group: o
group: o
group: l

 

总结:

  匹配英文单词,因为是组合,从1开始,所以适合用“+”,单个字符的话,适合用“+?”。正则表达式的语句多测验,就更好理解,不然有时候傻傻的分不清楚,用起来有时候会出现一些偏差