正则工具 - ReUtil
# 正则工具 - ReUtil
简介
ReUtil
是 Hutool 提供的一个便捷的正则表达式工具类,简化了 Java 正则表达式的使用。通过 ReUtil
,你可以更加方便地进行字符串匹配、提取、替换等操作,而无需手动处理 Pattern
和 Matcher
对象。
# 1. 从文本中提取符合正则表达式的内容
get
方法用于从文本中提取符合正则表达式的内容。你可以通过指定分组索引来获取匹配的子串。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234";
String regex = "(\\w)aa(\\w)";
// 获取匹配的内容
String result = ReUtil.get(regex, content, 1);
System.out.println("提取的内容: " + result); // 结果:Z
}
}
2
3
4
5
6
7
8
9
10
11
12
get(String regex, String content, int groupIndex)
:根据正则表达式从文本中提取内容。regex
:正则表达式。content
:要匹配的文本。groupIndex
:分组索引,用于指定提取第几个匹配的内容。- 返回值:匹配的内容,如果没有匹配到返回
null
。
作用: 用于从文本中提取特定内容,常用于表单验证、数据提取等场景。
实际开发场景: 在解析日志文件或提取特定格式的数据时,可以使用 get
方法获取所需内容。
# 2. 提取多个分组内容并拼接
extractMulti
方法用于从文本中提取多个分组内容,并将其拼接成一个字符串。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234";
String regex = "(\\w)aa(\\w)";
// 提取多个分组内容并拼接
String result = ReUtil.extractMulti(regex, content, "$1-$2");
System.out.println("提取并拼接的内容: " + result); // 结果:Z-a
}
}
2
3
4
5
6
7
8
9
10
11
12
extractMulti(String regex, String content, String template)
:提取多个分组内容并拼接。regex
:正则表达式。content
:要匹配的文本。template
:拼接模板,使用$1
、$2
等表示分组。- 返回值:拼接后的字符串。
作用: 用于提取并拼接多个匹配内容,适合复杂的文本解析需求。
实际开发场景: 在处理复杂的字符串时,可以使用此方法提取并重新组合所需内容。
# 3. 删除文本中的第一个匹配内容
delFirst
方法用于删除文本中第一个匹配的内容。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234";
String regex = "(\\w)aa(\\w)";
// 删除第一个匹配内容
String result = ReUtil.delFirst(regex, content);
System.out.println("删除后的内容: " + result); // 结果:ZZbbbccc中文1234
}
}
2
3
4
5
6
7
8
9
10
11
12
delFirst(String regex, String content)
:删除文本中第一个匹配的内容。regex
:正则表达式。content
:要匹配的文本。- 返回值:删除后的文本。
作用: 用于快速删除文本中第一个匹配的内容,适用于需要逐步清理文本的场景。
实际开发场景: 在数据清理或文本处理时,可以使用 delFirst
方法去除特定内容。
# 4. 查找文本中所有匹配的内容
findAll
方法用于查找文本中所有符合正则表达式的内容,并返回匹配内容的列表。
import cn.hutool.core.util.ReUtil;
import java.util.List;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234";
String regex = "\\w{2}";
// 查找所有匹配的内容
List<String> result = ReUtil.findAll(regex, content, 0);
System.out.println("所有匹配的内容: " + result); // 结果:[ZZ, Za, aa, bb, bc, cc, 12, 34]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
findAll(String regex, String content, int group)
:查找文本中所有匹配的内容。regex
:正则表达式。content
:要匹配的文本。group
:分组索引,用于指定返回的内容部分。- 返回值:包含所有匹配内容的列表。
作用: 用于批量查找并提取文本中的特定内容,适合日志分析、批量数据提取等场景。
实际开发场景: 在处理批量数据或日志时,可以使用 findAll
方法提取所有符合条件的内容。
# 5. 找到文本中的第一个数字
getFirstNumber
方法用于从文本中找到第一个匹配的数字。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234";
// 找到第一个数字
Integer result = ReUtil.getFirstNumber(content);
System.out.println("第一个数字: " + result); // 结果:1234
}
}
2
3
4
5
6
7
8
9
10
11
getFirstNumber(String content)
:从文本中找到第一个匹配的数字。content
:要匹配的文本。- 返回值:第一个匹配的数字,如果没有匹配到返回
null
。
作用: 用于从字符串中提取第一个数字,常用于表单数据验证、数值提取等场景。
实际开发场景: 在需要从字符串中提取第一个数字进行处理时,使用此方法可以非常方便地获取所需数值。
# 6. 判断字符串是否符合正则表达式
isMatch
方法用于判断给定字符串是否符合指定的正则表达式。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234";
String regex = "\\w+[\\u4E00-\\u9FFF]+\\d+";
// 判断是否匹配
boolean isMatch = ReUtil.isMatch(regex, content);
System.out.println("是否匹配: " + isMatch); // 结果:true
}
}
2
3
4
5
6
7
8
9
10
11
12
isMatch(String regex, String content)
:判断字符串是否匹配指定的正则表达式。regex
:正则表达式。content
:要匹配的文本。- 返回值:
true
如果字符串符合正则表达式,否则false
。
作用: 用于快速判断字符串是否符合某种模式,适用于表单验证、字符串格式校验等场景。
实际开发场景: 在用户输入验证时,可以使用 isMatch
方法判断输入是否符合预期格式。
# 7. 使用正则表达式替换字符串
replaceAll
方法用于在字符串中查找匹配正则表达式的部分,并使用指定的模板替换这些部分。模板可以包含 $1
、$2
等来引用匹配组。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234";
// 使用正则表达式替换字符串中的数字部分
String replaced = ReUtil.replaceAll(content, "(\\d+)", "->$1<-");
System.out.println("替换后的内容: " + replaced); // 结果:ZZZaaabbbccc中文->1234<-
}
}
2
3
4
5
6
7
8
9
10
11
replaceAll(String content, String regex, String replacement)
:使用正则表达式替换字符串中的匹配部分。content
:原始字符串。regex
:要匹配的正则表达式。replacement
:替换模板,可以使用$1
、$2
等引用匹配组。- 返回值:替换后的字符串。
作用: 用于根据正则表达式对字符串进行替换,尤其适合需要对文本中的特定模式进行批量替换的场景。
实际开发场景: 在文本处理中,如果需要将特定格式的数据(如电话号码、身份证号、数字等)替换为指定格式,可以使用 replaceAll
方法来实现。
# 8. 转义字符串中的正则表达式特殊字符
escape
方法用于转义字符串中的正则表达式特殊字符,使其在正则表达式中作为普通字符处理。这对于需要动态生成正则表达式的场景非常有用。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String specialStr = "我有个$符号{}";
// 转义字符串中的特殊字符
String escapedStr = ReUtil.escape(specialStr);
System.out.println("转义后的字符串: " + escapedStr); // 结果:我有个\\$符号\\{\\}
}
}
2
3
4
5
6
7
8
9
10
11
escape(String content)
:转义字符串中的正则表达式特殊字符。content
:要转义的字符串。- 返回值:转义后的字符串。
作用: 用于确保字符串中的特殊字符在正则表达式中作为普通字符处理,避免正则表达式的语法错误。
实际开发场景: 在需要动态生成或拼接正则表达式时,可以使用 escape
方法转义用户输入或其他动态内容,确保正则表达式的正确性。
# 9. 删除文本中的所有匹配内容
delAll
方法用于删除文本中所有匹配的内容,类似于 delFirst
方法,但会删除所有匹配的部分。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234aaabbb";
String regex = "aaa";
// 删除所有匹配内容
String result = ReUtil.delAll(regex, content);
System.out.println("删除后的内容: " + result); // 结果:ZZZbbbccc中文1234bbb
}
}
2
3
4
5
6
7
8
9
10
11
12
delAll(String regex, String content)
:删除文本中所有匹配的内容。regex
:正则表达式。content
:要匹配的文本。- 返回值:删除后的文本。
作用: 用于批量删除文本中的特定内容,适用于文本清理、数据整理等场景。
实际开发场景: 在需要清理或移除特定格式的文本时,delAll
方法可以高效地完成这一任务。
# 10. 统计文本中匹配的次数
count
方法用于统计文本中匹配正则表达式的次数,这对于需要统计特定模式出现频率的场景非常有用。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234aaa";
String regex = "aaa";
// 统计匹配次数
int count = ReUtil.count(regex, content);
System.out.println("匹配次数: " + count); // 结果:2
}
}
2
3
4
5
6
7
8
9
10
11
12
count(String regex, String content)
:统计文本中匹配正则表达式的次数。regex
:正则表达式。content
:要匹配的文本。- 返回值:匹配的次数。
作用: 用于统计特定模式在文本中出现的次数,适用于日志分析、数据统计等场景。
实际开发场景: 在分析日志文件或统计某种模式的出现频率时,count
方法可以帮助快速得到结果。
# 11. 替换文本中的第一个匹配内容
replaceFirst
方法用于替换文本中第一个匹配的内容,与 replaceAll
方法不同,replaceFirst
只会替换第一个匹配项。
import cn.hutool.core.util.ReUtil;
public class ReUtilExample {
public static void main(String[] args) {
String content = "ZZZaaabbbccc中文1234aaa";
String regex = "aaa";
// 替换第一个匹配内容
String result = ReUtil.replaceFirst(regex, content, "AAA");
System.out.println("替换后的内容: " + result); // 结果:ZZZAAAaaabbbccc中文1234aaa
}
}
2
3
4
5
6
7
8
9
10
11
12
replaceFirst(String regex, String content, String replacement)
:替换文本中第一个匹配的内容。regex
:正则表达式。content
:要匹配的文本。replacement
:替换的内容。- 返回值:替换后的文本。
作用: 用于替换文本中的第一个匹配内容,适用于需要精确控制替换操作的场景。
实际开发场景: 在文本处理中,有时候只需要替换第一个匹配项,这时可以使用 replaceFirst
方法进行替换操作。