正则表达式是一个用来处理字符串的工具
1.创建正则表达式
$ 匹配一行的结尾
^ 匹配一行的开头
() 标记子表达式的开始和结束位置
[] 用于确定中括号表达式的开始和结束位置
{} 用于标记前面字表达式的出现频度
* 指定前面字表达式可以出现零次或多次
+指定前面子表达式可以出现一次或多次
?指定前面子表达式可以出现零次或一次
.匹配除换行符\n之外的任何单字符
|指定两项之间任选一项
\用于转义下一个字符
例子:x? x表达式出现零次或一次
预定义字符
预定义字符可以匹配多个字符
.可以匹配任何字符
\d匹配0~9的任何数字
\D匹配非数字
\s匹配所有的空白字符,包括空格,制表符,回车符,换页符,换行符
\S匹配所有的非空白字符
\w匹配所有的单词字符,包括0~9所有的数字,26个英文字母和下画线
\W匹配所有的非单词字符
方括号表达式
表示枚举 [abc] a,b,c任意一个字符
表示范围:- [a-f] a~f范围内的字符
表示“否”:^
表示“与”:&& [a-z&&[^b-p]] a到z的范围内,除了不是b到p的范围内
表示“并”:[a-d[m-p]]
正则表达式支持的数量标识符合以下几种模式
贪婪模式:会一直匹配下去
勉强模式(用问号后缀(?)表示):z只会匹配最少的字符
占有模式(用j加号表示(+)):比较少用
以贪婪模式为例
X? x表达式出现一次零次或者一次
x* x表达式出现零次或多次
x+ x表达式出现一次或多次
x{n} x表达式出现n次
x{n,} x表达式最少出现n次
x{n,m} x表达式最少出现n次,最多出现m次
使用正则表达式
Pattern对象是正则表达式编译后在内存中的表示形式,因此正则表达式字符串必须先编译为Pattern对象,然后再利用该Pattern对象创建对应的Matcher对象。
例如:Pattern p=Pattern.compile("a*b"); //将一个字符串编译成Pattern对象
Matcher m=p.matcher("aaaaab") //使用Pattern对象创建Matcher对象
例子:
import java.util.regex.Pattern;
public class FindGroup
{
public static void main(String[] args)
{
Matcher m=Pattern.compile("\\w+").matcher("java is very easy!");
while(m.find())
{
System.out.println(m.group());
}
int i=0;
while(m.find(i))
{
System.out.println(m.group()+"\t");
i++;
}
}
}