正则表达式小结

  • 什么是正则
  • 正则语法
  • 常用的正则片段
  • Java中正则的用法

什么是正则?

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。(百度百科)
我自己的理解是一个匹配指定文本的工具,用于检验文本是否符合指定的规范,操作指定格式的文本。

语法

匹配备选列表中的某个字符,比如abcd:[abcd],- 符号标识区间,如0-9 a-z A-z。
由这条可以推出以下几条语法:
匹配一个数字:[0-9],因为这条很常用,所以提供了简化符号\d(java中\\d)来表示一个数字
匹配一个字母:[a-zA-Z]
匹配一个字母或数字:简化符号\\w
匹配特殊字符,如空格和Tab符:\s 换行符:\n 制表符:\t
不匹配某个字符,如不想匹配x:[^x], [^aeiou]匹配除了aeiou这几个字母以外的任意字符。同样可以和上面的符号进行组合,[^0-9],[^d],[^w]用于表示排除这个范围。
对于简化符号\d,\w的否定可以用大些来替代,如\D,\W
或条件,x|y匹配x或y。例如,"z|food"能匹配"z"或"food"或"zood"(此处请谨慎)。"(z|f)ood"则匹配"zood"或"food"
位置限定,$限定字符串开头,^限定字符串结尾,如$t[abcd]t^ 匹配tat,tbt,tct,tdt。不匹配rtat,tatr。
个数描述
*匹配0次或多次
. 匹配任意一个字符
+ 至少一次
? 至多一次
{n} 准确匹配n次
{n,}至少匹配n次
{n,m}匹配n到m次
组的概念
在正则中所有的个数描述符的作用对象都是前一个单位,这个单位通常是一个字符,但是组的概念可以把多个字符组成一个单位,也就是组。在正则中用()来表示。
例如:(text){3}匹配texttexttext,(text)把text看成一个整体。这里还有一个小问题,如何匹配()这一类的元字符,在正则表达式中想要匹配元字符统一用\进行转义。
贪婪非贪婪匹配
非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。当?字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。例如,对于字符串"oooo","o+?"将匹配单个"o",而"o+"将匹配所有"o"。

常用的正则片段

匹配中文字符:[\u4e00-\u9fa5]
匹配空白行:\n\s*\r
匹配Email地址:
匹配网址URL:[a-zA-z]+://[^\s]*
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\{7,8}
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配中国邮政编码:[1-9]\d{5}(?!\d)
匹配18位身份证号:^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
匹配整数:^-?[1-9]\d*$
匹配浮点数:^-?[1-9]\d*\.\d*|0\.\d*[1-9]\d*$

Java中正则的用法

基本用法,获得Pattern,Matcher。接下来的所有操作都是基于Matcher的。

String line = "gender=12;name=tom";

String regex = "gender=(\\d+);name=(\\w+)";

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(line);

检验方法,用于检验匹配程度
matcher.matches() 用于检验是否严格匹配正则表达式
matcher.find() 用于检验是否有部分匹配了正则表达式
组操作
matcher.groupCount() 用于统计匹配组的个数
matcher.group(n) 用于提取第n个匹配的分组内容
比如下面这个例子,匹配后可以分别获得两个匹配组的具体内容

String line = "gender=12;name=tom";

String regex = "gender=(\\d+);name=(\\w+)";

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(line);

System.out.println(matcher.groupCount());

System.out.println(matcher.group(1));

System.out.println(matcher.group(2));

替换方法(replacement methods)用于在输入的字符串中替换文本有用处的方法。
appendReplacement(StringBuffer sb, String rep):实现非结尾处的增加和替换操作。
appendTail(StringBuffer sb):实现结尾处的增加和替换操作。
replaceAll(String rep):使用给定的字符串来替换输入序列中匹配模式的每一个子序列。
replaceFirst(String rep):使用给定的字符串来替换输入序列中匹配模式的第一个子序列。

转载于:https://www.cnblogs.com/AlwaysFixBug/p/4882531.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值