3336 0
一.什么是正则表达式
常用元字符可以简单的理解在 Java 的正则表达式中,两个 代表其他语言中的一个 ,这也就是为什么表示一位数字的正则表达式是 d,而表示一个普通的反斜杠是 \。正则表达式就是记录文本规则的代码。baw *b 匹配以字母a 开头的单词—— 首先是单词的开头(b),然后是字母a,然后是任意数量的字母或数字(w),最后是单词结尾(b)。
d+ 匹配1 个或多个连续数字。这里的+是一个类似的元字符,只不过它匹配重复任意次数(可能0次),而+匹配重复1次或多次。 **
假设你在一篇英文小说里查找hi,你可以使用正则表达式hi。b是正则表达式规定的元字符代表着单词的开头或结尾,也就是单词的分界处很多单词里包含hi这两个连续的字符,比如him,history,high等等。用hi来查找的话,这里边的hi也会被找出来。如果要精确地查找hi这个单词的话,我们应该使用bhib。
二.入门
.是另一个元字符,匹配除了换行符以外的任意字符。同样是元字符,不过它代表的不是字符,也不是位置,而是数量——它指定前边的内容可以连续重复使用任意次以使整个表达式得到匹配。.*连在一起就意味着任意数量的不包含换行的字符。现在bhib.*bLucyb的意思就很明显了:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词。
三.元字符
正则表达式中的所有限定符- 指定的代码数0dd-dddddddd匹配这样的字符串:以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字我们也可以这样写这个表达式:0d{2}-d{8}。这里d后面的{2}({8})的意思是前面d必须连续重复匹配2次(8次)。010- 1 010正则表达式里的单词是什么意思吧:就是不少于一个的连续的w。s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。010 -59000
四.字符转义
bw{6}b匹配刚好6个字符的单词。元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。这两个代码在验证输入的内容时非常有用,比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^d{5,12}$。这里的{5,12}和前面介绍过的{2}是类似的,只不过{2}匹配只能不多不少重复2次,{5,12}则是重复的次数不能少于5次,不能多于12次,否则都不匹配。如果你想查找元字符本身的话,比如你查找.,或者,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用来取消这些字符的特殊意义。因此,你应该使用.和*。当然,要查找本身,你也得用\.例如:deerchao.net匹配deerchao.net,C:\Windows匹配C:Windows。
五.重复
Windowsd+匹配Windows后面跟1个或更多数字^w+匹配一行的第一个单词
六.字符类
常用蚂蚁名称代码要想查找数字,字母或数字,空白是很简单的,因为已经有了对应这些字符集合的元字符,但是如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?你只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)。(?0d{2}[) -]?d{8}这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。分析:首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(d{8})。
七.分支条件
010 - 59000不幸的是,刚才那个表达式也能匹配010)12345678或(022-87654321这样的“不正确”的格式。要解决这个问题,我们需要用到分枝条件。正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。0d{2}-d{8}|0d{3}-d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。通用分组语法
八.分组
d{5}-d{4}|d{5}这个表达式用于匹配:5位数字,或者用连字号间隔的9位数字。使用分枝条件时,要注意各个条件的顺序。如果你把它改成d{5}|d{5}-d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。这里9位邮编前五位率先被匹配了,所以失败。
九.反义
如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。(d{1,3}.){3}d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:d{1,3}匹配1到3位的数字,(d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(d{1,3})。有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义3336 0
十.后向引用
S+匹配不包含空白符的字符串。(?=# 断言要匹配的文本前缀(w+)# 查找尖括号内的字母或数字(即HTML/XML 标签)
) # 前缀结尾
* # 匹配任意文本
(?=# 断言文本后缀匹配\/1 # 查找尖括号括起来的内容:前面是"/",后面是之前捕获的标签
) # 后缀结尾
十一.宽度断言
]+匹配用尖括号括起来的以a开头的字符串。使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。惰性限定符
十二.负宽度断言
后向引用用于重复搜索前面某个分组匹配的文本。例如,1代表分组1匹配的文本。模式类:
模式对象是正则表达式的编译表示。 Pattern 类没有公共构造函数。要创建Pattern对象,必须首先调用其公共静态编译方法,该方法返回Pattern对象。此方法接受正则表达式作为其第一个参数。匹配器类:
Matcher 对象是解释和匹配输入字符串的引擎。与Pattern 类一样,Matcher 没有公共构造函数。需要调用Pattern对象的matcher方法来获取Matcher对象。模式语法异常:
PatternSyntaxException 是一个非强制异常类,表示正则表达式模式中的语法错误。导入java.util.regex.*;
正则表达式示例1类{
公共静态无效主(字符串参数[]){
字符串内容="我是菜鸟" +
"来自runoob.com。";
字符串模式=".*runoob.*";
boolean isMatch=Pattern.matches(模式, 内容);
System.out.println("字符串中是否包含"runoob"子字符串?" + isMatch);
}
}
【深入解析Java正则表达式应用技巧】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我一直觉得正则表达式好复杂,想学懂Java里的用法。
有15位网友表示赞同!
正则表达式真是个让人头疼的东西,但又很有用的工具啊。
有20位网友表示赞同!
刚开始接触Java的时候,正则表达式的理解是最大的难点之一。
有10位网友表示赞同!
做开发工作真得需要熟练掌握正则表达式,太常用啦!
有13位网友表示赞同!
有好多项目都用到正则表达式,学习一下 Java 的用法确实有用。
有10位网友表示赞同!
以前用其他语言学过正则表达式,现在想在Java项目中应用。
有8位网友表示赞同!
感觉Java的正则表达式的语法比其他语言更容易理解一些。
有6位网友表示赞同!
Java的文档解释正则表达式写的真清晰,能看懂好多重点了!
有16位网友表示赞同!
最近在做数据处理的项目需要用到Java里的正则表达式,就来学习一下。
有20位网友表示赞同!
准备参加一场Java面试考试,正则表达式的题型好像经常出现。
有16位网友表示赞同!
想找到一些好的Java正则表达式学习资源,有什么推荐吗?
有9位网友表示赞同!
看到有人说Java里的正则表达式语法很强大,是真的吗?
有8位网友表示赞同!
正在学习Apache Commons StringUtils库中关于正则表达式的功能,很有用。
有20位网友表示赞同!
想要了解一下Java正则表达式在文本匹配方面的应用场景。
有20位网友表示赞同!
有没有什么简单易用的Java正则表达式工具可供参考?
有10位网友表示赞同!
想学习更多Java正则表达式的高级用法,比如拆分字符串等。
有10位网友表示赞同!
分享一些你在实际开发项目中遇到的Java正则表达式案例吧。
有9位网友表示赞同!
对Java的正则表达式应用方向不太了解,有什么建议吗?
有11位网友表示赞同!
学习Java正则表达式感觉很有挑战性,但也是一个很好的锻炼。
有18位网友表示赞同!
掌握了Java正则表达式,很多文本操作任务都能够快速解决。
有15位网友表示赞同!