------- 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、对前后查找取非
前面说到的向前查找和向后查找通常都是用来匹配文本,其目的是为了确定将被返回的匹配结果的文本的位置(通过指定匹配结果的前后必须是哪些文本)。这种用法叫正向前查找和正向后查找。还有一种负向前查找和负向后查找,是查找那些不与给定模式相匹配的文本。
前后查找的操作符:
(?=) 正向前查找
(?!) 负向前查找
(?
分享到:
相关推荐
Java正则表达式介绍和练习Java正则表达式介绍和练习Java正则表达式介绍和练习
- `黑马程序员_毕向东_Java基础视频教程第13天-05-String(常见功能-比较和去除空格).avi`则可能讲解了`equals()`、`trim()`和`compareTo()`的使用方法。 理解并熟练掌握这些字符串操作是Java编程的基础,对于编写...
`split()`方法使用正则表达式作为分隔符来切割字符串成多个子字符串,返回一个字符串数组。`replace()`和`replaceAll()`方法用于替换字符串中的特定字符或模式。`replace()`仅替换第一个匹配项,而`replaceAll()`则...
《黑马程序员Java基础笔记》是一份全面覆盖Java编程基础知识的学习资料,旨在帮助初学者迅速掌握Java编程语言,能够独立编写Java程序。这份笔记由多个部分组成,分别详细讲解了Java的基础语法、集合、多线程、IO以及...
7. **字符串处理**:String类是Java中常用的类之一,第五章可能介绍字符串的创建、比较、拼接、查找和替换等操作,以及正则表达式在字符串处理中的应用。 8. **接口与内部类**:接口是Java中实现多继承的方式,用于...
3. **切点(Pointcut)**:定义了通知何时执行的规则,通常使用正则表达式或自定义表达式来匹配方法签名。 4. **连接点(Join Point)**:程序执行过程中能够插入通知的一个点,如方法调用、字段赋值等。 5. **切入...
习题可能会涵盖字符串的创建、比较、截取、拼接以及使用正则表达式进行匹配和替换。 5. **异常处理**:学习如何使用try-catch-finally语句块来捕获和处理程序运行时可能出现的错误。 6. **集合框架**:Java集合...
在Java编程语言中,字符串(String)是一个至关重要的概念,它被广泛用于数据...在观看“黑马程序员_毕向东_Java基础视频教程第13天-02-String(常见功能-获取和判断).avi”时,建议结合实例进行练习,加深理解和记忆。
除此之外,还有日期时间处理、正则表达式、异常处理、IO流、多线程、网络编程、反射、注解、动态代理、XML解析、工厂模式和装饰模式等进阶主题。 总的来说,Java的学习是一个系统的过程,从基础知识到高级特性的...