正则表达式,又称规则表达式(Regular Expression
,在代码中常简写regex
、regexp
或RE
),是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式的特点:
- 灵活性、逻辑性和功能性非常的强;
- 可以迅速地用极简单的方式达到字符串的复杂控制;
- 对于初学者来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器 EditPlus,大到 Microsoft Word、Visual Studio 等大型编辑器,都可以使用正则表达式来处理文本内容。
接下来,作者将会介绍正则表达式在Java语言中对字符串的常见操作:
- 匹配
实际上,使用的就是String
类中的matches()
方式。
- 切割
实际上,使用的就是String
类中的split()
方式。
- 替换
实际上,使用的就是String
类中的replaceAll()
方式。
- 获取
将正则表达式进行封装,通过正则对象Pattern
的matches
方法与字符串进行关联,获取字符串操作的匹配器对象Matcher
,再通过Matcher
匹配器对象的方法对字符串进行操作。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexApply {
public static void main(String[] args) {
functionDemo_4();
}
/**
* 获取
*/
public static void functionDemo_4() {
String str = "Hi girl, I like you!";
String regex = "\\b[a-z]{3}\\b";
// 将正则表达式封装成对象
Pattern p = Pattern.compile(regex);
// 使用Matcher对象的方法对字符串进行操作,为了获取三个字母组成的单词,可以用查找find()方法
Matcher m = p.matcher(str);
System.out.println(str);
while (m.find()) {
// 获取匹配的字符串子序列
System.out.println(m.group());
System.out.println(m.start() + ":" + m.end());
}
}
/**
* 替换
*/
public static void functionDemo_3() {
// 替换字符串中重叠的字母为单独一个字母
String str = "Harbingggggongyedaxxxxxue";
str = str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
// 对手机号进行模糊处理
String tel = "18800001234";
tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(tel);
}
/**
* 分割
*/
public static void functionDemo_2() {
// 以字符串中的重叠字母进行分割
String str = "Harbiniiigongyejjjjdaxue";
String[] names = str.split("(.)\\1+");
for(String name : names){
System.out.println(name);
}
}
/**
* 匹配
*/
public static void functionDemo_1() {
// 验证该手机号是否满足号码规则
String tel = "18800001234";
String regex = "1[358]\\d{9}";
boolean b = tel.matches(regex);
System.out.println(tel + ":" + b);
}
}