正则表达式
- 字符类(只匹配单个字符)
- 预定义字符(只匹配单个字符)
- 数量词
小结
- 正则表达式的书写规则
符号 | 含义 | 举例 |
---|---|---|
? | 0次或1次 | \\d? |
* | 0次或多次 | \\d* ---------- (abc)* |
+ | 1次或多次 | \\d+ --------- (abc)+ |
{} | 具体次数 | a{7} --------- \\d{7, 19} |
(?i) | 忽略后面字符的大小写 | (?i)abc |
a((?i)b)c | 只忽略b的大小写 | a((?i)b)c |
[] | 里面的内容出现1次 | [abc] |
^ | 取反 | [^abc] |
&& | 交集,不能写单个的& | [a-z&&m-p] |
. | 任意字符 | \n回车符号不匹配 |
\ | 转义字符 | \\d |
\\d | 0-9 | \\d+ |
\\D | 非0-9 | \\D+ |
\\s | 空白字符 | \\D+ |
\\S | 非空白字符 | [^\s] |
\w | 单词字符 | [a-zA-Z_0-9] |
\\W | 非单词字符 | [^\w] |
() | 分组 | 并集 a(bc)+ |
写在方括号外面表示 |
# 正则表达式爬取信息
// 需求1:从以下内容中爬取出手机、邮箱、座机电话等信息
private static void method1() {
String data = "一起学Java,\n" +
"电话:13511296261,15265432051,\n" +
"或者联系邮箱:bonus@163.com,\n" +
"座机电话:010123456789,010-123564812,\n" +
"邮箱:13194641245@qq.com,\n" +
"邮箱:dlei0009@126.com,\n" +
"热线电话:400-618-9080,400-618-1200,400-6185000,4006186666";
// 1、定义爬取规则
String regex = "(1[3-9]\\d{9})|(0\\d{2,7}-?\\d{4,19})|([\\w&&[^0]]\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2})"
+ "|(400(-?\\d{3,7}){2})";
// 2、正则表达式封装成Pattern对象
Pattern pattern = Pattern.compile(regex);
// 3、通过Pattern对象获取查找内容的匹配器对象
Matcher matcher = pattern.matcher(data);
// 4、定义循环爬取信息
while (matcher.find()) {
String rs = matcher.group(); // 获取到找到的内容
System.out.println(rs);
}
}
package com.itheima.regex;
import java.util.Arrays;
public class RegexTest4 {
public static void main(String[] args) {
// 1、public String replaceAll(String regex, String newStr):按照正则表达式匹配的内容进行替换
// 需求1:请把 古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴,中间的非中文字符替换成"-"
String s1 = "古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴";
System.out.println(s1.replaceAll("\\w+", "-"));
// 需求2(拓展):某语音系统,收到一个口吃的人说的“我我我喜欢编编编编编编编编编程程!”需要优化成“我喜欢编程!”
/**
* (.) 一组,匹配任意字符
* \\1:为这个组声明一个组号:1号
* +:声明必须是重复的字
* $1可以去取到第一组代表的那个重复的字
*/
String s2 = "我我我喜欢编编编编编编编编编程程!";
System.out.println(s2.replaceAll("(.)\\1+", "$1"));
// 2、public String[] split(String regex):按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组
// 需求1:请把 古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴,中的人名获取出来
String s3 = "古力娜扎ai8888迪丽热巴999aa5566玛尔扎哈fbbhdjfn4156卡尔扎巴";
String[] names = s3.split("\\w+");
System.out.println(Arrays.toString(names));
}
}
原文地址:https://blog.csdn.net/ioncannontic/article/details/140368456
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!