正则标记
java.util.regex
包中提供有Pattern
程序类,在这个类中定义了所有受支持的正则标记。
1、字符匹配
匹配单个字符
- 任意字符:表示由任意字符组成
\\
:匹配\
\n
:匹配换行\t
:匹配制表符
String str = "a";
String regex = "a";
System.out.println(str.matches(regex)); // true
2、字符集匹配
匹配单个字符
[abc]
:表示可能是字母a、b、c
中的任意一个[^abc]
:表示不是由字母a、b、c
中的任意一个[a-zA-Z]
:表示由一个任意字母所组成,不区分大小写;[0-9]
:表示由一位数字所组成;
String str = "a";
String regex = "[abc]";
System.out.println(str.matches(regex)); // true
3、简化字符集
.
:表示任意的一个字符\d
: 等价于[0-9]
范围\D
:等价于[^0-9]
范围\s
: 匹配任意的一位空格,可能是空格、换行、制表符\S
:匹配任意的非空格数据\w
:匹配字母、数字、下划线,等价于[a-zA-Z_0-9]
\W
:匹配非字母、数字、下划线,等价于[^a-zA-Z_0-9]
4、边界匹配
^
:匹配边界开始$
:匹配边界结束
5、数量表示
默认情况下只有添加上了数量单位才可以匹配多位字符
表达式?
:该正则可以出现 0 次或 1 次表达式*
:该正则可以出现 0 次,1 次或多次表达式+
:该正则可以出现 1 次或多次表达式{n}
:表达式的长度正好为n
次;表达式{n}
:表达式的长度为n
次以上;。表达式{n,m}
:表达式的长度在n~m
次
String str = "abc";
String regex = "\\w{3,}";
System.out.println(str.matches(regex)); // true
String 对正则的支持
在进行正则表达式大部分处理的情况下都会基于String
类来完成,String
类中提供有如下方法支持正则
方法名称 | 描述 |
---|---|
public boolean matches(String regex) | 将指定字符串进行正则判断 |
public String replaceAll(String regex, String replacement) | 替换全部 |
public String replaceFirst(String regex, String replacement) | 替换首个 |
public String[] split(String regex) | 正则拆分 |
public String[] split(String regex, int limit) | 正则拆分 |
- 去除所有非字母数字
String str = "SKF,.QW/QC8C$Q23$$#()ewfWEF4";
String regex = "[^a-zA-Z0-9]+";
System.out.println(str.replaceAll(regex,""));
// SKFQWQC8CQ23ewfWEF4
- 以数字拆分
String str = "b1e82fb28bodb98x3b2xkjo2hxdjsb";
String regex = "\\d+";
String[] result = str.split(regex);
System.out.println(Arrays.toString(result));
// [b, e, fb, bodb, x, b, xkjo, hxdjsb]
- 小数判断
String str = "100.0";
String regex = "\\d+(\\.\\d+)?";
System.out.println(str.matches(regex));
- 日期判断
String str = "1998-10-20";
String regex = "\\d{4}-\\d{2}-\\d{2}";
System.out.println(str.matches(regex));
regex 包支持
java.util.regex
开发包,如果不是进行一些更为复杂的正则处理是很难使用到的,而String
类所提供的功能只适合于正则的基本操作。
-
Pattern
类,提供有正则表达式的编译处理支持 -
Matcher
类,实现了正则匹配的处理类,这个类的对象实例化依靠Pattern
类完成 -
字符串拆分
String str = "b1e82fb28bodb98x3b2xkjo2hxdjsb";
String regex = "\\d+";
// `compile` 编译一个正则表达式为`Pattern`对象
Pattern pat = Pattern.compile(regex);
String[] result = pat.split(str);
System.out.println(Arrays.toString(result));
// [b, e, fb, bodb, x, b, xkjo, hxdjsb]
- 字符串匹配
String str = "11110111";
String regex = "\\d+";
Pattern pat = Pattern.compile(regex);
Matcher mat = pat.matcher(str);
System.out.println(mat.matches());
- 取出
#{内容}
标记的所有内容
String str = "insert into dept(deptno,dname,loc) values (#{deptno},#{dname},#{loc})";
String regex = "#\\{\\w+\\}";
Pattern pat = Pattern.compile(regex);
// `matcher` 用`Pattern`对象匹配一个字符串,返回匹配结果
Matcher mat = pat.matcher(str);
while (mat.find()){
System.out.println(mat.group(0).replaceAll("#|\\{|\\}",""));
}