正则表达式
符合正则规范的表达式叫做正则表达式。正则表达式其实就是由文本和字符串组成字符串
(一)常用文档
字符 | 含义 |
---|---|
× | 字符x |
// | 反斜线字符 |
/t | 制表符(水平制表) |
/n | 换行符 |
/r | 回车符 |
/e | 转义符 |
. | 任意字符 |
字符类 | 含义 |
---|---|
[a|b|c] | a或b或c |
[^abc] | 任何字符,除了a、b或c |
[a-zA-Z] | a到z或A到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 | 非数字 |
/s | 空白字符,[/t、/n、/x0B、/f、/r] |
/S | 非空白字符 |
/w | 单词字符,[a-zA-Z 0-9] |
/W | 非单词字符 |
Greedy数量词 | 含义 |
---|---|
x? | x:一次或者一次也没有 |
x* | x:零次或多次 |
x+ | x:一次或多次 |
x{n} | x:恰好n次 |
x{n,} | x:至少n次 |
x{n,m} | x:n到m次 |
Reluctant 数量词 | 含义 |
---|---|
X?? | X,一次或一次也没有 |
X*? | X,零次或多次 |
X+? | X,一次或多次 |
X{n}? | X,恰好 n 次 |
X{n,}? | X,至少 n 次 |
X{n,m}? | X,至少 n 次,但是不超过 m 次 |
边界匹配器 | 含义 |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
/b | 单词边界 |
/B | 非单词边界 |
/A | 输入的开头 |
/G | 上一个匹配的结尾 |
/Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
/z | 输入的结尾 |
(二)替换字符串
java
//替换手机号
public class test01 {
public static void main(String[] args) {
String str = "王一13421643043";
String regex = "(1\\d{2})(\\d{4})(\\d{4})";//正则表达式:一个中括号为一组,组内d{n}表示组内n个字符串
str = str.replaceAll(regex, "$1****$3");//$n:第n组 $1****$3:保留第1组和第3组,中间的替换为****
System.out.println(str);//王一134****3043
}
}
(三)验证字符串
Pattern:代表正则表达式的匹配模式
Matcher:提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
java
//验证QQ邮箱
public class test02 {
public static void main(String[] args) {
String str = "3871249382@qq.com";
String regex = "\\d{5,10}@qq.com";//正则表达式:由5到10位的数字以及@qq.com组成
boolean matches = str.matches(regex);//验证QQ邮箱是否符合正则表达式
System.out.println(matches);//true
}
}
(四)分割字符串
java
//分割地址
public class test03 {
public static void main(String[] args) {
String str = "F:\\_JY\\_QF\\知识点\\IMGS\\变量.png";
String regex = "\\\\";//以\\为分割点
String[] split = str.split(regex);//进行分割
for (String s : split){
System.out.println(s);
}
}
}
(五)爬取数据
Pattern:代表正则表达式的匹配模式
Matcher:提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
java
//Pattern+Matcher 找到前端代码中的图片路径
public class test04 {
public static void main(String[] args) {
String str = "<img src = 'hhy/aaa.jpg'/><div><div/> <input type='image' src='submit.gif' /><img src = 'bbb.jpg'/>";
//正则表达式字符串
String regex = "<img\\s*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg)\\b)('|\")?/>";//对照上述文档,识别上述Src的字符串
//正则表达式对象
Pattern pattern = Pattern.compile(regex);
//利用正则表达式对象解析字符串,返回解析对象
Matcher matcher = pattern.matcher(str);
//查询结果
while (matcher.find()){
String group = matcher.group(2);
System.out.println(group);
}
}
总结:
正则表达式不需要写,但是需要能够会通过上述常用文档认出相关正则表达式含义