关于java:java正则表达式保姆级教程从小白到高手

7次阅读

共计 2115 个字符,预计需要花费 6 分钟才能阅读完成。

目前所做的我的项目须要用到正则表达式,从新总结一下正则表达式。

正则表达式看似简略,实则门路颇多,究其原因也就是其太灵便了。齐全把握还是须要消耗一些功夫的。

一、正则表达式原字符

读者需对正则表达式元字符有一个初步的印象,理论利用时能够查阅文档。

正则表达式能够分为六类:限定符、抉择匹配符、分组组合和反向援用符、字符匹配符、定位符、特殊字符

1、限定符 本义符
字符 形容
\ 转义字符
^ 匹配输出字符串的开始地位
$ 匹配输出字符串的完结地位
* 匹配后面的子表达式零次或屡次,等价于{0,}
+ 匹配后面的子表达式一次或屡次,等价于{1,}
? 匹配后面的子表达式零次或一次,等价于{0,1}
{n} 匹配确定的 n 次
{n,} 至多匹配 n 次
{n,m} 起码匹配 n 次且最多匹配 m 次
{?} 当该字符紧跟在任何一个其余限制符(*,+,?,{n},{n,},{n,m})前面时,匹配模式是非贪心的
{n,} 至多匹配 n 次
{\b} 匹配一个单词边界
{\B} 匹配非单词边界
2、字符匹配符
字符 阐明
[xyz] 匹配所蕴含的任意一个字符
1 匹配未蕴含的任意字符
[a-z] 匹配指定范畴内的任意字符
2 匹配任何不在指定范畴内的任意字符
3、捕捉分组 非捕捉分组
字符 形容
(pattern) 匹配 pattern 并获取这一匹配
(?:pattern) 匹配 pattern 但不获取匹配后果,也就是说这是一个非获取匹配
(?=pattern) 在任何匹配 pattern 的字符串开始处匹配查找字符串
4、特殊字符
字符 形容
. 匹配任何单词字符,除 \n 以外,要匹配包含“\n”在内的任何字符,请应用像“(. \n)”的模式
\d 匹配一个数字字符。等价于[0-9]
\D 匹配一个数字字符。等价于[0-9]
\r 匹配一个换行
\s 匹配任何空白字符
\S 匹配任何非空白字符
\w 匹配包含下划线的任何单词字符
\W 匹配任何非单词字符
\t 匹配一个制表符
\W 匹配任何非单词字符
5、抉择匹配符

x|y 匹配 x 或 y

6、罕用正则表达式
作用 表达式
电子邮箱 /^#?([a-f0-9]{6} [a-f0-9]{3})$/
URL /^(https?://)?([\da-z.-]+).([a-z.]{2,6})([/\w .-])/?$/

二、java 中表达式的利用

java 中对正则表达式的利用次要是两个类,上面是列出的一些罕用办法,其中须要指明的是,这些都是静态方法。

1、Pattern 类
  compile(String regex) 将给定的正则表达式编译为 Matcher。matches(String regex, CharSequence input)间接匹配以后字符串

##### 2、Matcher 类

find(int start) 查找是否存在匹配

group(int group) 获取匹配分组

matches()  匹配以后字符串

start()  匹配开始地位

end(int group)  匹配完结地位

replaceAll(String replacement) 匹配替换

三、实例

1、应用 java 的正则表达式的一个简略利用
要求:提取出 {abc} 中的内容
 
 @Test
public void test11(){String str = "知情同意书签订日期 {zqdate}<yyyy/mm/dd>";
    String reg = "\\{+[a-z]?+\\}"; //  /<0= 表 0—入排规范 >/--[0,2]
    // 将规定封装成对象。Pattern p = Pattern.compile(reg);
    // 让正则对象和要作用的字符串相关联。获取匹配器对象。Matcher m  = p.matcher(str);
    while(m.find())
    {System.out.println(m.group());
    }
}

后果

1、再整一个难活

有这样一串字符串
仔细观察这段字符串是 a–a–a 模式的 我要的是 – 局部,而后我这样写。

发现提取进去只有一部分。

仔细分析后发现,java 默认是采纳的贪心模式。而这段字符串是 a–a–a 模式的,它把我第
一个 a 和最初一个 a 当做是匹配的一整个。

解决这个问题也很简略,只须要这样写

在限定符 * 前面加一个?标识这是一个非贪心模式,后果失常了,作为两局部返回了。

![在这里插入图片形容](https://img-blog.csdnimg.cn/ea62078af9bf4c029da4fc07adab5de0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5ZGY55Sw5biI5YWE,size_10,color_FFFFFF,t_70,g_se,x_16)

四、总结

置信读者能把这两个例子看懂正则表达式也能有一个初步的把握,而成为一个正则表达式高手就须要靠你了。

把握正则表达式肯定要多写,只有写的多了才能够熟记于心,不会的多查阅文档。

学常识要知其然,知其所以然。

过来出问题了只会在百度搜寻,而后在后果中一个个的尝试。

当初有问题了,一步步 debug 源码寻找问题的本源。心愿读者都能逐步转变学习形式。

即便看不懂源码的每一步,也能对整个过程有一个初步的意识,对于当前学习源码有极大的帮忙。

有问题小伙伴们评论区见喔。


  1. xyz ↩
  2. a-z ↩
正文完
 0