------- android
培训、java培训、期待与您交流! ----------
正则表达式
一、
正则表达式基础知识
1、正则表达式是一个由特定字符([ ] { } / + . ?)组成的字符串,本质是Pattern对象
2、正则表达式底层是Pattern对象:就是说正则表达式,如:”[0-9][1-9]{4,14}”,必须首先被编译成Pattern 对象
A regular
expression, specified as a string, must first be compiled into an
instance of Pattern
class. ---API Document
The resulting pattern
can then be used to create a Matcher object that can match arbitrary character sequences against the regular expression. ---API Document
3、Java 语言的正则表达式主要由两个类: Pattern(模式) 和Matcher(匹配器)
Pattern:A compiled representation of a regular expression
Pattern成员方法:参见JDK
Matcher:An engine that performs match
operations on a character sequence by interpreting a Pattern
a)、根据Pattern对象产生Matcher对象,一个Pattern对象能产生多个Matcher对象
b)、经典的调用顺序:
// 将由字符串表示的正则表达式进行对象的封装
Pattern p = Pattern.compile(“a*b”);
// 通过Pattern对象的matcher方法和任意字符串关联,获取要对字符串操作的匹配器
Matcher m = p.matcher(“aaaaab”);
// 通过Matcher匹配器对象的方法对字符串进行操作
Boolean b = m.matches();
简略的调用:boolean b = Pattern.matches("a*b", "aaaaab");
是上面三步的缩写,并且只能执行matches 方法1次
c)、Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作
二、常用的正则表达式
1、^ 和 $:分别用来匹配整个字符串的开始和结束
“^The”:开头一定要是The字符串
“of despair$”:结尾
一定要有of despair的字符串
“notice”:匹配包含notice的字符串,在matchs(),lookingAt(),find()表现不同
“notice”并没有用^和$,说明正则表达式可以出现在被检验字符串的任何地方,因为没有把它锁定到两边
注意:^用在中括号开头的时候,就表示排除括号里面的字符
"^[a-z A-Z]": 匹配以大小写字母开头的字符串
"%[^a-z A-Z]%":匹配含有两个百分号里面有一个非字母的字符串
2、* + ?:用来表示一个字符或一个组出现的次数
* == 出现0次或者更多次 == {0,}
+ == 出现1次或者更多次 == {1,}
? == 出现0次或者1次 == {0,1}
注意:* + ? 只关注它前面那个字符或者组
3、| 相当于or操作
“hi | hello”:匹配含有hi 或者hello的字符集
"(a│b)*c": 匹配含有这样多个(包括0个)a或b,后面跟一个c的字符串
4、\b:匹配
单词边界 \B:匹配非单词边界
“ve \b”:匹配love里的ve,而不匹配very里的ve
三、lookaround
需求:在HTML页面中,匹配出一对标签之间的文本,如与之间的文本
文本:welcome to my page
正则表达式:.*? [Tt][Ii][Tt][Ll][Ee]>
结果:【welcome to my page】
期望结果:【welcome to my page】
解决办法:lookaround
1、向前查找(lookahead):指定了一个必须匹配但不在结果中返回的模式
向前查找实际上就是一个子表达式,它以?=开头,需要匹配的文本跟在=的后面
例子:匹配出一个URL地址中
协议部分
正则表达式:.+(?=:)
结果:【http】://blog.csdn.net/mhmyqn
若正则表达式:.+: 则匹配结果:【http:】
分析:我们使用?=向正则表达式引擎表明,只要找到:就行了,但不包括在最终的返回结果里。
2、向后查找(lookbehind):?welcome to my page
正则表达式:(?).*?(?= [Tt][Ii][Tt][Ll][Ee]>)
结果:【welcome to my page】
4、对前后查找取非
前面说到的向前查找和向后查找通常都是用来匹配文本,其目的是为了确定将被返回的匹配结果的文本的位置(通过指定匹配结果的前后必须是哪些文本)。这种用法叫正向前查找和正向后查找。还有一种负向前查找和负向后查找,是查找那些不与给定模式相匹配的文本。
前后查找的
caozuofu.html" target="_blank">操作符:
(?=) 正向前查找
(?!) 负向前查找
(?