简单来说正则表达式是对字符串执行模式匹配的技术
模式对象Pattern,匹配器Matcher,在Pattern中指定匹配字符串的规则然后用Matcher进行匹配
循环匹配matcher.find()
什么是分组,比如 (\d\d)(\d\d) ,正则表达式中有() 表示分组
第 1 个()表示第 1 组,第 2 个()表示第 2 组...
1.根据指定的规则,定位满足规则的子字符串(比如1996)它会先找到1996这个四位数,然后根据()分成两组
2.找到后,将子字符串的下标存入matcher的对象属性int[] groups例如1998
groups[0]放的是起始下标,groups[1]放的是结束下标+1
groups[0]中的值就是0,groups[1]的值就是4, [0,4)
记录 1 组()匹配到的字符串"19" groups[2] = 0 groups[3] = 2, [0,2)
记录 2 组()匹配到的字符串"98" groups[4] = 2 groups[5] = 4, [2,4)
3.同时记录oldLast的值为字符串结束下标+1,下次执行find就会从上次的结束下标+1的位置开始
package November;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author 小小小白白白白
*/
public class Regular {
public static void main(String[] args) {
String content ="周星驰(Stephen Chow),1962年6月22日出生于香港,祖籍浙江省宁波市," +
"中国香港影视男演员、导演、编剧、制作人、商人,毕业于无线电视艺员训练班。\n" +
"1980年成为丽的电视台的特约演员,从而进入演艺圈。1981年出演个人首部电视剧" +
"《IQ成熟时》。1988年将演艺事业的重心转向大银幕,并于同年出演电影处女作《捕风汉子》" +
"。1990年凭借喜剧片《一本漫画闯天涯》确立其无厘头的表演风格;同年,因其主演的喜剧动" +
"作片《赌圣》打破香港地区票房纪录而获得关注。1991年主演喜剧片《逃学威龙》,并再次打" +
"破香港地区票房纪录 [1] 。1995年凭借喜剧爱情片《大话西游》奠定其在华语影坛的地位。" +
"1999年自导自演的喜剧片《喜剧之王》获得香港电影年度票房冠军 [2] 。\n" +
"2002年凭借喜剧片《少林足球》获得第21届香港电影金像奖最佳男主角奖、最佳导演奖 [3] 。2003年成为美国《时代周刊》封面人物 [4] 。2005年凭借喜剧动作片《功夫》获得第42届台湾电影金马奖最佳导演奖。2008年自导自演的科幻喜剧片《长江7号》获得香港电影年度票房冠军。2013年执导古装喜剧片《西游·降魔篇》,该片以2.18亿美元的票房成绩打破华语电影在全球的票房纪录 [5-6] 。2016年担任科幻喜剧片《美人鱼》的导演、编剧、制作人,该片以超过33亿元的票房创下中国内地电影票房纪录 [7-10] 。\n" +
"演艺事业外,周星驰还涉足商界。1989年成立星炜有限公司。1996年成立星辉公司。2010年" +
"出任比高集团有限公司执行董事 [11] 。";
/*String content="私有地址(Private address)属于非注册地址,专门为组织机构内部使用。\n" +
"以下列出留用的内部私有地址\n" +
"A类 10.0.0.0--10.255.255.255\n" +
"B类 172.16.0.0--172.31.255.255\n" +
"C类 192.168.0.0--192.168.255.255";*/
//提取文章中所有的英文单词
//1. 先创建一个pattern对象,模式对象,可以理解成一个正则表达式对象
//加号表示可以有多个
Pattern pattern = Pattern.compile("[a-zA-z]+");
//提取文章中所有的数字
Pattern pattern = Pattern.compile("[0-9]+");
//提取文章中所有的数字和英文单词
Pattern pattern = Pattern.compile("([0-9])+|([a-zA-z]+)");
//提取指定格式的内容
Pattern pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d");
//匹配所有四个数字
//1. \\d 表示一个任意的数字,四个就表示一个四位数字
String regStr = "(\\d\\d)(\\d\\d)";
//2. 创建模式对象[即正则表达式对象]
Pattern pattern = Pattern.compile(regStr);
//3. 创建匹配器
//说明:创建匹配器 matcher, 按照 正则表达式的规则 去匹配 content 字符串
//matcher匹配器按照pattern(模式/样式),去content文本中匹配,返回Boolean
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
/**
* matcher.group(0)
* 根据groups[0]和groups[1]记录的位置,从content开始截取字符串并返回
* 如果正则表达式有分组
* group(0) 表示匹配到的子字符串
* group(1) 表示匹配到的子字符串的第一组字串
* group(2) 表示匹配到的子字符串的第 2 组字串
* 分组的数不能越界
*/
System.out.println("找到:"+matcher.group(0));
System.out.println("第一组:"+matcher.group(1));
System.out.println("第二组:"+matcher.group(2));
}
}
}