正则匹配
正则匹配
基本使用
java.util.regex 包主要包括以下三个类:
* Pattern 类
正则表达式的编译表示。没有公共构造方法,必须首先调用其公共静态编译方法获得 Pattern 对象。
* Matcher 类
对输入字符串进行解释和匹配操作的引擎。没有公共构造方法,需要调用 Pattern 对象的 matcher 方法获得 Matcher 对象。
* PatternSyntaxException 类
非强制异常类,表示正则表达式模式中的语法错误。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main( String args[] ) {
Pattern p = Pattern.compile("abc"); // 编译正则表达式
Matcher matcher = p.matcher("abcdefg"); // 放入字符串中匹配
System.out.println(((Matcher) matcher).lookingAt()); // 是否存在子串匹配 true
System.out.println(matcher.matches()); // 是否完全匹配 false
}
}
正则表达式
在 Java 中,正则表达式编译需要再经过一次转义。因此 \\ 才表示插入一个正则表达式的反斜线!
字符类(默认匹配一个字符)
[abc] 只能是a, b, 或c
[^abc] 除了a, b, c之外的任何字符
[a-zA-Z] a到z A到Z,包括(范围)
[a-d[m-p]] a到d,或m到p(并集)
[a-z&&[def]] d, e, 或f(交集)
[a-z&&[^bc]] a到z,除了b和c
[a-z&&[m-p]] a到z,除了m到p
预定义的字符类(默认匹配一个字符)
. 任何字符
\d 一个数字: [0-9]
\D 非数字: [^0-9]
\s 一个空白字符: [ \t\n\x0B\f\r]
\S 非空白字符: [^\s]
\w [a-zA-Z_0-9] 英文、数字、下划线
\W [^\w] 一个非单词字符
贪婪的量词(配合匹配多个字符)
X? X , 一次或根本不
X* X,零次或多次
X+ X , 一次或多次
X {n} X,正好n次
X {n, } X,至少n次
X {n,m} X,至少n但不超过m次
字符串对象提供了匹配正则表达式的方法
// 判断是否匹配正则表达式,匹配返回true,不匹配返回false
System.out.println("a".matches("[abc]")); // true
System.out.println("z".matches("[abc]")); // false
public class RegexDemo04 {
public static void main(String[] args) {
String names = "小路dhdfhdf342蓉儿43fdffdfbjdfaf小何";
String[] arrs = names.split("\\w+"); // 按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组
for (int i = 0; i < arrs.length; i++) {
System.out.println(arrs[i]);
}
String names2 = names.replaceAll("\\w+", " "); // 按照正则表达式匹配的内容进行替换
System.out.println(names2);
}
}
捕获组
我们可以在正则表达式中同时捕获多个结果,最终以 group 的形式呈现
public class RegexDemo05 {
public static void main(String[] args) {
String rs = "学习Java,电话020-43422424,或者联系邮箱" +
"itcast@itcast.cn,电话18762832633,0203232323" +
"邮箱bozai@itcast.cn,400-100-3233 ,4001003232";
// 需求:从上面的内容中爬取出 电话号码和邮箱。
// 1、定义爬取规则,字符串形式
String regex = "(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})|(1[3-9]\\d{9})" +
"|(0\\d{2,6}-?\\d{5,20})|(400-?\\d{3,9}-?\\d{3,9})";
// 2、把这个爬取规则编译成匹配对象。
Pattern pattern = Pattern.compile(regex);
// 3、得到一个内容匹配器对象
Matcher matcher = pattern.matcher(rs);
// 4、开始找了
while (matcher.find()) {
String rs1 = matcher.group();
System.out.println(rs1);
}
}
}

正则表达式
浙公网安备 33010602011771号