正则表达式概念
所谓正则表达式就是处理字符串的特殊字符串
用途
字符串匹配(字符匹配)
字符串查找(是建立在匹配之上的查找)
字符串替换(是建立在查找的结果之后的替换)
例如
IP地址是否正确
从网页中揪出Email地址
从网页揪出链接
类
java.lang.String
java.util.regex.Pattern
java.util.regex.Matcher
要点
//一个反斜线
String str1 = "\\";
//正则表达式的一个反斜线使用两个反斜线,在java中表示就再需要两个反斜线转义
System.out.println(str1.matches("\\\\"));
//POSIX Style,这种写法不建议使用,如果要使用查API
System.out.println("a".matches("\\p{Lower}"));
//空白行
" \n".matches("^[\\s&&[^\n]]*\\n$");
//邮箱
String regex1 = "[\\w[.-]]+";
String regex2 = "@";
String regex3 = "[\\w[.-]]+";
String regex4 = "\\.";
String regex5 = "[\\w]+";
String regex = regex1+regex2+regex3+regex4+regex5;
System.out.println("156112846@qq.com".matches(regex));
正则表达式的基本语法
普通字符(字母,数字,汉字,下划线)
一个普通字符在表达式中只匹配与之相同的一个字符
表达式k在字符串sky进行匹配时,将匹配成功
\r,\n,\t,\f
表示回车符,换行符,制表符,换页符
.
任意一个字符
X?
表示X可以出现0次或者1次
X+
表示X可以出现1次或者多次
X*
表示X可以出现任意次
X{n}
表示X可以出现n次
X{m,n}
表示X可以最少出现m次,最多出现n次
X{n,}
表示X最少出现n次
[ ]
匹配中括号中任意一个字符
[^ ]
匹配中括号中字符之外的任意一个字符
\d
表示0~9之间的任意一个数字字符,即[0-9]
\D
表示0~9之外的任意数字字符,即[^0-9]
\r,\n,\t,\f
表示回车符,换行符,制表符,换页符
\s
表示空格,制表符,换页符等空白字符的任意一个
\S
表示空白字符以外的任意一个字符,即[^\s]
\w
表示字母,数字,下划线中的任意一个字符,即[a-zA-Z_0-9]
\W
表示字母,数字,下划线以外的任意一个字符,即[^a-zA-Z_0-9]
^
该符号不匹配任何字符,字符串开始的位置,即^h必须以h开头
$
该符号不匹配任何字符,字符串结束的位置,即r$必须以r结尾
\b
该符号不匹配任何字符,表示单词的边界
\B
该符号不匹配任何字符,表示非单词的边界,即[^\b]
|
用来连接两个表达式,表示或的关系
X|Y 表示X或者Y中的任意字符
()
作为一个单元,一个分组
\n(n表示一个数字)
有分组的情况下,表示对分组的引用
\1表示对分组1的引用
\
转义字符,当一个符号自身有意义而又要表示这个字符的时候,就需要转义
\^表示^,\$表示$
?
如果在?,+,*,{n},{m,n},{n,}后面,表示次数按非贪婪模式进行匹配,
即按照匹配模式进行最小限度的匹配
贪婪 VS 非贪婪 VS 独占
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws Exception {
String str = "aaaa5bbbb6";
/*
* 贪婪的
* 一次吃进最多的10个字符,不匹配,再吐出来一个,匹配了,结束了
*/
String regex1 = ".{3,10}[0-9]";
Matcher m1 = Pattern.compile(regex1).matcher(str);
if (m1.find())
System.out.println(m1.start() + "-" + m1.end());
else
System.out.println("not match!");
/*
* 非贪婪的
* 一次吃进最少的3个字符,然后看后面哪个是不是数字,
* 再吞一个,然后再看后面哪个是不是数字,匹配了,结束了
*/
regex1 = ".{3,10}?[0-9]";
m1 = Pattern.compile(regex1).matcher(str);
if (m1.find())
System.out.println(m1.start() + "-" + m1.end());
else
System.out.println("not match!");
/*
* 独占的
* 一次吃进最多的10个字符,不匹配,不吐出来,不匹配了,结束了
*/
regex1 = ".{3,10}+[0-9]";
m1 = Pattern.compile(regex1).matcher(str);
if (m1.find())
System.out.println(m1.start() + "-" + m1.end());
else
System.out.println("not match!");
}
}
/*
打印结果:
0-10
0-5
not match!
*/
转载地址:https://blog.csdn.net/itlwc/article/details/10145987 |