版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37860140/article/details/93465024
正则表达式的相关应用
1.为什么使用正则表达式
典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。
2.正则表达式能做什么
通过使用正则表达式,可以:
测试字符串内的模式。
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
替换文本。
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
基于模式匹配从字符串中提取子字符串。
可以查找文档内或输入域内特定的文本。
3. 正则表达式的定义
正则表达式,又称规则表达式,是一种文本模式,通常用来检索、替换和控制文本。主要包括a 到 z 的字母以及一些特殊的元字符。
4.正则表达式的组成
(1) 普通字符
大多数字符都将简单地匹配它们的自身值,它们被称为普通字符,如数字(0-9),字母(a-z, A-Z)等
(2) 元字符
正则表达式除了进行字符自身之的匹配外,还可以基于指定的规则进行模糊匹配。这就意味着它需要一些特殊字符来表示这些模糊的匹配规则,因此这些特殊字符默认情况下并不能匹配到它们自身的字面值,而是表示某些特殊的功能。
(3) 元字符详解
1.单个字符匹配
2.预定义的字符集
3.字符次数的匹配----量词
4.边界匹配
5.逻辑与分组
6.特殊构造
单个字符匹配
预定义的字符集
字符次数的匹配----量词
边界匹配
逻辑与分组
特殊构造
5.正则表达式实例
Java正则表达式
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
运用捕获组判断叠字
// 匹配AAA形式的叠字字符串
String str1 = "aaa";
System.out.println(str1.matches("(.)\\1+"));
// 匹配AABB形式的叠字字符串
String str2 = "AABB";
System.out.println(str2.matches("(.)\\1(.)\\2"));
// 匹配ABAB形式的叠字字符串
String str3 = "ABAB";
System.out.println(str3.matches("(..)\\1"));
对字符串的分割
String reg=":";
Pattern pat = Pattern.compile(reg);
String[] rs = pat.split("aa:bb:cc");
/*
String s = "aa:bb:cc";
String[] rs=s.split(":");
*/
字符串的替换和删除
String reg="A+";//表示1个或多个"A"
Pattern pat=Pattern.compile(reg);
Matcher mat=pat.matcher("ABABAA");
String s=mat.replaceAll("D");//替换
String s=mat.replaceAll(""); //删除
Pattern类和Matcher类的方法分析
Pattern p=Pattern.compile("\\w+");
p.pattern();//返回 \w+
Pattern.split(CharSequence input)
用于分隔字符串,并返回一个String[]
Pattern.matcher(String regex,CharSequence input)
是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.返回BOOLEAN类型
Pattern.matcher(CharSequence input)
返回Matcher类的实例
Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()匹配操作
matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
find()对字符串进行匹配,匹配到的字符串可以在任何位置.
Mathcer.start()/ Matcher.end()/ Matcher.group()得到具体信息
start()返回匹配到的子字符串在字符串中的索引位置.
end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
group()返回匹配到的子字符串
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("aaa2223bb");
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223后的索引号
m.group();//返回2223
Mathcer m2=p.matcher("2223bb");
m2.lookingAt(); //匹配2223
m2.start(); //返回0,由于lookingAt()只能匹配前面的字符串,所以当使用lookingAt()匹配时,start()方法总是返回0
m2.end(); //返回4
m2.group(); //返回2223
Matcher m3=p.matcher("2223bb");
m3.matches(); //匹配整个字符串
m3.start(); //返回0
m3.end(); //返回6,因为matches()需要匹配所有字符串
m3.group(); //返回2223bb
HTML代码片段的正则表达式匹配
上面是https://www.jb51.net/网页首页的部分代码,如果想把所有
标签下 标签中的文字标题给爬取下来,用正则表达式去实现
Pattern p=Pattern.compile("li>