一:什么是正则表达式
1.定义:正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
2.用途:
- 字符串匹配(字符匹配)
- 字符串查找
- 字符串替换
- 字符串分割
例如:
- 从网页中揪出email地址
- IP地址是否正确
- 从网页中揪出链接
3.java中处理正则表达式的类:
- java.lang.String
- java.util.regex.Pattern:模式类:字符串要被匹配的这么一个模式,该模式本身已经被编译过,使用的话效率要高很多。
- java.util.regex.Matcher:匹配类:这个模式匹配某个字符串所产生的结果,这个结果可能会有很多个。
4:下面通过一个小程序简单介绍一下正则表达式
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { static void main(String[] args) { //matches()判断字符串是否匹配某个表达式,"."表示任何一个字符
p("abc".matches(...")); 将字符串"a2389a"中的数字用*替换,\d 表示“0--9”数字
p(a2389a".replaceAll(\\d",*将任何是a--z的字符串长度为3的字符串进行编译,这样可以加快匹配速度
Pattern p = Pattern.compile([a-z]{3}"); 进行匹配,并将匹配结果放在Matcher对象中
Matcher m = p.matcher("); p(m.matches()); 上面的三行代码可以用下面一行代码代替
p(")); } void p(Object o){ System.out.println(o); } }
下面是打印结果
true a****a true
true
现在通过一些实验来说明正则表达式的匹配规则,这儿是Greedy方式
. 任何字符
a? a一次或一次也没有
a* a零次或多次
a+ a一次或多次
a{n}? a恰好 n 次
a{n,}? a至少n次
a{n,m}? a至少n次,但是不超过m次
//初步认识. * + ? p(a."));true p(aaaaaaa*a+"".matches(a?false p(1232435463685899\\d{3,100}192.168.0.aaa\\d{1,3}\\.\\d{1,3}192[0-2][0-9][0-9]true @H_301_312@
[abc] a、b或c(简单类)
[^abc] 任何字符,除了a、b或c(否定)
[a-zA-Z] a到z或A到Z,两头的字母包括在内(范围)
[a-d[m-p]] a到d或m到p:[a-dm-p](并集)
[a-z&&[def]] d、e或f(交集)
[a-z&&[^bc]] a到z,除了b和c:[ad-z](减去)
[a-z&&[^m-p]] a到z,而非m到p:[a-lq-z](减去)
范围 p([abc][^abc]A[a-zA-Z][a-z]|[A-Z][a-z[A-Z]]R[A-Z&&[RFG]]\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
认识\s \w \d \ p(\n\r\t\\s(4)" \\Sa_8 \\w(3)abc888&^%[a-z]{1,3}\\d+[&^#%]+\\\\\\true