正则表达式

 正则表达式

概述

        就是由一些特定的字符组成,代表的是一个规则。

        是String中的一个方法 matches

boolean boo = "a".matches("[abc]");

作用:1.用来校验数据格式是否合法(更简单、更便捷)。2.在一段文本中查找满足要求的内容。

书写规则

字符类(只匹配单个字符)
[abc]只能是a, b,或c
[^abc]除了a, b, c之外的任何字符
[a-zA-Z]a到z A到z,包括(范围)
[a-d[m-p]]a到d,或m到p
[a-z&&[def]]d, e,或f(交集)
[a-z&&[^bc]]a到z,除了b和c (等同于[ad-z])
[a- z&&[^m-p]]a到z,除了m到p (等同于[a-1q-z])
预定义字符(只匹配单个字符)
.任何字符(回车符号不匹配)
\d一个数字:[0-9]
\D非数字:[^0-9]
\s一个空白字符:
\S非空白字符:[^\s]
\w[a-zA-Z_ 0-9]
\W[^\w]一个非单词字符
boolean boo = "1".matches("\\d")
//  \d之前要加一个\
数量词
X?X,一次或0次
X*X,零次或多次
X+X,一次或多次
X {n}X,正好n次
X{n, }X,至少n次
X {n,m}X,至少n但不超过m次
boolean boo = "a".matches("\\w?");
符号含义举例
[ ]里面的内容出现一次[abc]
^取反[^abc]
&&交集(不能写单个的&)[a-z&&m-p]
(?i)忽略大小写
|或(写在方括号外面表示并集)ab|AB
( )分组a(bc)+
\转义字符\\d
{ }具体次数a{7}      \\d{7,19}
"ABC".matches("(?i)abC");
 // true


"aBc".matches("a((?i)b)c");
 // true


"123".matches("\\d{3}I[a-z]{3}");
//要求要么是3个小写字母,要么是3个数字。


"我爱编程666".matches("我爱(编程)+(666)+");
//必须是"我爱"开头,中间可以是至少一个“编程”,最后至少是1个"666"


".".matches("\\.");
//判断是否为点

应用

查找文本中的内容

        1.定义爬取规则(正则表达式)

        2.把正则表达式封装成一个Pattern对象

        3.通过pattern对象得到查找内容的匹配器

        4. 定义一个循环,通过匹配器开始去内容中查找信息

        5.取出信息

//文本
String date = "xxxxxxxxxxxxxxxxxxx"+
            "XXXXXXXXXXXXXXXXXXXXXXX";


String regex = "(\\W{1, }|" +"(1[3-9]\\d{9})|(@\d{2,5}-?\\d{5,15})";

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(data);

while(matcher.find()){
    System.out.println(matcher.group());
}

搜索替换、分割内容

        需要结合String提供的方法完成。

方法名说明
public String replaceAll(String regex , String newStr)按照正则表达式匹配的内容进行替换
public String[ ] split(String regex):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。

String s1 = "XXXXXXXXX";
s1.replaceAll("\\w+","z");


//(拓展):"我我我喜欢编编编编编编编编编编编编程程程!",需要优化成“我喜欢编程!”

string s2 ="我我我喜欢编编编编编编编编编编编编程程程";
system.out.println(s2.replaceAll("(.)\\1+" , "$1"));
/**
  * (.)一组: .匹配任意字符的。
  * \\1 :为这个组声明一个组号:1号
  * + :声明必须是重复的字
  */



String s2 = "XXX000X0X00XXX";
String[] s3= s2.split("\\d+");
System.out.println(Arrays.toString(s3));

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值