java正则表达式

正则表达式用于字符串的匹配,C中的scanf、printf在某种程度上也是一种匹配,本文主要针对应用于Java的正则表达式。
单刀直入,正则表达式匹配需要正则字符串一个、Pattern对象一个、Matcher一个。待匹配字符串一个备用。

1.正则字符串

(1)常量范围:

抓取已知的字符序列时,只需输入该字符。例:“is"则会匹配待匹配字符串中所有的“is”。

(2)变量范围:

为了提高匹配的自由度,java正则表达式提供以下符号表示匹配范围:\d——匹配数字,\w——匹配字母,\s——匹配空白符(如空格,tab,回车等)将上述字母大写则取其原匹配的补集,‘.’匹配任意字符(故想要匹配小数点时,需要加上转义符\.)。另,在中括号 [] 中输入待匹配的字符,则匹配时只会抓取中括号内的字符,对于0-9,a-z等表意较明确的场合,可用‘-’表示区间。

(3)匹配次数:

以上符号只提供单一字符的匹配范围,java正则表达式提供以下符号表示左方范围修饰字符所应匹配的个数:*表示0个或多个,+表示1个或多个,?表示0个或1个。另,在大括号 {} 中输入一个数字n表示恰好出现n次,输入n,m则表示出现n到m次。

(4)分组框选:

在正则字符串中加入()相当于对其分组,详见matcher部分。

2.Pattern

例:Pattern pattern1 = Pattern.compile(regularString);,pattern中写入的时上述的正则字符串。

3.Matcher

例:Matcher matcher1 = pattern1.matcher(string);,mattcher返回的是pattern在string中的匹配。
matcher的最常用功能:
matcher.group(int i);,i为0时返回匹配的整体,其余正数则返回对应第i组(第i个括号中)的内容。
matcher.find();,检查正则表达式是否被匹配。

4.实例

String s,athlete="Athlete ::= <(\\w+)*,(\\d+),(\\w+),(\\d+),(\\d{1,2}.\\d+)>";
Pattern pattern3 = Pattern.compile(athlete);
List as=new ArrayList<>();
while ((s = reader.readLine()) != null){
	Matcher matcher3 = pattern3.matcher(s);
	if (matcher3.find()){//记录半径
		String name=matcher3.group(1);
		int phone=Integer.parseInt(matcher3.group(2));
		String nation=matcher3.group(3);
		int age=Integer.parseInt(matcher3.group(4));
		float record=Float.parseFloat(matcher3.group(5));
		as.add(new Athlete(name,phone,nation,age,record));
	}
}

你可能感兴趣的:(java,正则表达式)