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开始,所以适合用“+”,单个字符的话,适合用“+?”。正则表达式的语句多测验,就更好理解,不然有时候傻傻的分不清楚,用起来有时候会出现一些偏差