在常见类型中:标准的Js格式数据(非json),需要我们自行解析处理
一、正则表达式的常见类型:
\d: 匹配一个数字字符,等价于
[0-9]
。\w: 匹配一个单词字符,包括字母、数字和下划线,等价于
[a-zA-Z0-9_]
。\s: 匹配一个空白字符,包括空格、制表符、换行符等。
.: 匹配任意单个字符,除了换行符
\n
。\b: 匹配一个单词边界,即单词字符与非单词字符之间的位置。
^: 匹配字符串的开始。
$: 匹配字符串的结束。
[]: 匹配方括号内的任意一个字符。例如,
[abc]
匹配字符a
、b
或c
。{}: 指定匹配的次数,例如
{n}
表示匹配前一个元字符恰好出现n
次,{m,n}
表示匹配前一个元字符至少出现m
次、至多出现n
次。()?: 标记一个子表达式的开始和结束,也可以表示该子表达式是可选的。
|: 表示逻辑或,匹配两个或多个选择中的任意一个。
-
匹配邮箱地址:
String regex = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b";
-
匹配 URL:
String regex = "^(http|https)://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$";
-
匹配日期(YYYY-MM-DD 格式):
String regex = "\\b\\d{4}-\\d{2}-\\d{2}\\b";
-
匹配手机号码:
String regex = "\\b(\\+?\\d{1,3}[- ]?)?\\d{10}\\b";
-
匹配 IP 地址:
String regex = "\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b";
二、核心类:Pattern、Matcher;
例子:
@Test
public void testRep2(){
// 按指定模式在字符串查找
String line = "This order was placed for QT3000! OK?";
String pattern = "(\\D*)(\\d+)(.*)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
System.out.println("Found value: " + m.group(3) );
} else {
System.out.println("NO MATCH");
}
}
编译正则表达式: 首先,你需要将正则表达式字符串编译成一个
Pattern
对象。可以使用Pattern.compile()
方法进行编译。
String regex = "your_regular_expression"; Pattern pattern = Pattern.compile(regex);
创建 Matcher 对象: 接下来,使用
Pattern
对象的matcher()
方法创建一个Matcher
对象,用于执行匹配操作。
String input = "your_input_string"; Matcher matcher = pattern.matcher(input);
执行匹配操作: 使用
Matcher
对象的方法执行匹配操作,比如查找匹配、提取匹配、替换等。
boolean found = matcher.find(); // 查找下一个匹配项
提取匹配结果: 如果找到了匹配项,可以使用
Matcher
对象的方法提取匹配到的内容。
String match = matcher.group(); // 获取整个匹配项
迭代匹配结果: 如果有多个匹配项,可以使用循环迭代匹配到的结果,依次处理每个匹配项。
while (matcher.find()) { String match = matcher.group(); // 处理匹配项 }
替换匹配结果(可选): 如果需要,可以使用
Matcher
对象的replaceAll()
或replaceFirst()
方法替换匹配到的内容。
String replaced = matcher.replaceAll(replacement);
获取匹配位置(可选): 如果需要,可以使用
start()
和end()
方法获取匹配文本的起始位置和结束位置。
int start = matcher.start(); int end = matcher.end();