需要掌握:正则表达式
java中的 \\
在 Java 中,使用 正则表达式 的 特殊符号 时,前面需要用 \\ 转义。
相当于 \t 表示制表符
在其他语言中,一般使用 \ 表示
需要转义的符号有:
.
*
+
$
\/
?
^
[
]
(
)
{
}
JAVA 与 正则表达式
JAVA 处理正则表达式的类都在java.util.regex 包
Pattern 类
Pattern 类没有公共构造方法。要创建 Pattern 对象,通过调用下面静态方法:
public static Pattern compile(String regex)public static Pattern compile(String regex, int flags)
返回 Pattern 对象。该方法第一个参数是 正则表达式
Matcher 类
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。Matcher 也没有公共构造方法,通过调用下面静态方法 要创建 Matcher 对象:
public Matcher matcher(CharSequence input)
传入要匹配的字符串,返回 Matcher 对象。
Matcher 类的常用方法
matches():判断整个字符串是否完全匹配正则表达式
find():查找字符串中是否存在匹配的子串(可多次调用,每次找下一个)
group():获取匹配到的子串(配合 find() 使用),group(n) 可获取第 n 个分组的内容
replaceAll(String replacement):替换所有匹配的子串
replaceFirst(String replacement):替换第一个匹配的子串
Matcher 类的 matches()方法
判断整个字符串是否完全匹配正则表达式
例子
//编译正则表达式
Pattern p = Pattern.compile("\\d+");
//传入要匹配的字符串,返回 Matcher 对象
Matcher m = p.matcher("123");
//进行匹配
boolean b=m.matches();
System.out.println(b);
Pattern 简化
Pattern 类有下面静态方法,简化操作:public static boolean matches(String regex, CharSequence input)
该方法源代码如下:
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
例子:
boolean b=Pattern.matches("\\d+","123");
System.out.println(b);
String 简化
String类有下面方法,简化匹配操作public boolean matches(String regex)
该方法源代码如下:
return Pattern.matches(regex, this);
例子:
boolean b="123".matches("\\d");
System.out.println(b);
Matcher 类的 find() 方法
查找字符串中是否存在匹配的子串(可多次调用,每次找下一个)
例子
String text = "2002年asdf2005年2389423,2019年";
String patternStr = "\\d\\d\\d\\d年";
Matcher matcher = Pattern.compile(patternStr).matcher(text);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("年份出现次数:"+count);
执行结果:
年份出现次数:3
Matcher 类的 group() 方法
提取匹配正则表达式的子串(配合 find() 使用)
String text = "2002年asdf2005年2389423,2019年";
String patternStr = "\\d\\d\\d\\d年";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(text);
// 必须执行find(),否则报错
while (matcher.find()) {
System.out.println(matcher.group());
}
执行结果:
2002年
2005年
2019年
Matcher 类的 group(n) 方法
可获取第 n 个分组的内容
String text = "2002年01月20日asdf2005年02月10日2389423,2019年10月25日";
// 正则表达式中,一个 () 就是一组
String patternStr = "(\\d\\d\\d\\d年)(\\d\\d月)(\\d\\d日)";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println(matcher.group(0)); // 0表示提取整个匹配字符串
System.out.println(matcher.group(1)); // 1表示提取第1组,即:\\d\\d\\d\\d年
System.out.println(matcher.group(2)); // 2表示提取第2组,即:\\d\\d月
System.out.println(matcher.group(3)); // 3表示提取第3组,即:\\d\\d日
}
例子
验证手机号
移动号段正则表达式
String regex="^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$";
boolean flag = "13811111111".matches(regex);//判断功能
System.out.println(flag);
正则表示式意思:
^:表示以后面这些数字为开始((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8])):有小括号,这些是一组,相当于数学中的小括号,表示优先级。[4-9]:表示4-9之间的数字都符合|:表示 或者
表示前3位:134、135、136、137、138、139、147、150、151、152,157、158、159、178、182、183、184、187、188
\\d{8}:表示8个任意数字|(1705)\\d{7}:表示或者1705号段,后面是7个任意数字$:表示匹配字符串结尾
替换字符串
//将下面字符串中,数字替换成【JAVA】
String str="wp3ofe1hwpeojf5哦I啊6我哦";
String str2=str.replaceAll("\\d","【JAVA】");
System.out.println(str);
System.out.println(str2);
感谢:
https://www.runoob.com/java/java-regular-expressions.html