Java正则表达式的总结
Java正则表达式,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容.
判断用户的输入是否符合实际需求。
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
1.字符类([]只能表示一个字符,不能表示多个,如[ab]表示ab中的一个而不是表示连起来的ab)
. 任意一个字符
[abc] a、b、c中的任意一个
[^abc] a、b、c之外的任意字符
[a-zA-Z] a到z或A到Z中的任意一个字符
[abc[hij]] 相当于[abchij]
[a-z&&[hij]] a-z与hij的交,hij中的一个
\s 空白(空格,tab,换行,换页,回车)
\S 非空白([^\s])
\d 数字0-9
\D 非数字[^0-9]
\w 词字符[a-zA-Z0-9]
\W 非词字符[^\w]
2.逻辑操作符
XY Y在X后面
X|Y X或Y
(X) 组,可以用group(int group)方法来获得相应的组,组号为0表示整个表达式,组号为1表示第一队括起来的组,依此类推
3.量词
? 0个或1个
+ 至少一个
* 0个或多个
X{n} 恰好n个X
X{n,} 至少n个X
X{n,m} n到m个X
4.匹配模式
有三种匹配模式:
(1)贪婪型
默认都是贪婪的,比如有字符串abcabc,当使用正则表达式(.*c)时只能匹配到abcabc,而不是abc
(2)勉强型
用?表示,加在量词后面。对于字符串abcabc,使用正则表达式(.*?c),?表示勉强型,表示匹配满足模式所需的最少字符,可以匹配到两个abc
(3)占有型
只在java中能用,防止回溯,用+表示,加在量词后面
5.用法
java中编写正则表达式要注意转义
(1)直接使用String类的matches()方法,效率较低
(2)先用Pattern.compile()方法编译正则表达式
Pattern p = Pattern.compile(regex)
接下来使用Pattern对象的matcher()方法,生成一个Matcher对象
Matcher m = p.matcher(input),input为字符串,可以为"",使用""可以为循环提供一定的性能优化,可以在创建Matcher对象后用reset()重置字符串
- public static void main(String[] args) {
- // 要验证的字符串
- String str = "service@xsoftlab.net";
- // 邮箱验证规则
- String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}";
- // 编译正则表达式
- Pattern pattern = Pattern.compile(regEx);
- // 忽略大小写的写法
- // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(str);
- // 字符串是否与正则表达式相匹配
- boolean rs = matcher.matches();
- System.out.println(rs);
- }
(3)matcher.find()可用来查找多个匹配,如可用
while(m.find()){
System.out.print(m.group());
}
来查找所有匹配的字符串。
matcher.find(i)表示从位置i开始匹配
实例:
20 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
21 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
常用正则表达式
| 规则 | 正则表达式语法 |
| 一个或多个汉字 | ^[\u0391-\uFFE5]+$ |
| 邮政编码 | ^[1-9]\d{5}$ |
| QQ号码 | ^[1-9]\d{4,10}$ |
| 邮箱 | ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$ |
| 用户名(字母开头 + 数字/字母/下划线) | ^[A-Za-z][A-Za-z1-9_-]+$ |
| 手机号码 | ^1[3|4|5|8][0-9]\d{8}$ |
| URL | ^((http|https)://)?([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ |
| 18位身份证号 | ^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X|x)?$ |
转义字符:
特别字符
说明
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 和和。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ ] 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n' 匹配字符 ‘n'。'\n' 匹配换行符。序列 ‘\\' 匹配 “\”,而 ‘\(' 则匹配 “(”。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ } 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
Java正则表达式的总结的更多相关文章
- java正则表达式
java正则表达式 1.Java正则表达式的语法与示例: http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式: http://www.runo ...
- Java正则表达式入门——转自RUNOOB.COM
Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...
- Java 正则表达式详解
Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...
- 【转】详解Java正则表达式语法
(转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...
- java正则表达式【大全】
[正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...
- JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- JAVA正则表达式:Pattern类与Matcher类详解
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- Java 正则表达式[转载]
PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...
- Java正则表达式的应用
在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...
- Java正则表达式实用教程
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...
随机推荐
- powerdesiger 导入sqlserver 方法
https://jingyan.baidu.com/album/7f766daf465e9c4101e1d0d5.html
- English Voice of <<See You Again >>
<See You Again >(<当我们再相见>) 演唱:Wiz Khalifa/Charlie Puth 维兹·卡利法/查理·普斯 It's been a long da ...
- 【消息队列】kafka是如何保证消息不被重复消费的
一.kafka自带的消费机制 kafka有个offset的概念,当每个消息被写进去后,都有一个offset,代表他的序号,然后consumer消费该数据之后,隔一段时间,会把自己消费过的消息的offs ...
- Fiddler抓包配置具体步骤
如何查看手机连接的无线wifi的IP? 打开手机,选择设置->进入设置页面选择WLAN->进入WLAN管理,点击手机已经连接的路由器->点击进入查看,即可看见IP地址 如何查看自己电 ...
- PHP如何定义类及其成员属性与操作
1.类的定义: 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ //成员属性 $name = ' ...
- php文件处理函数
//basename的使用$path='test/abc.jpg'; echo basename($path);// echo '<br/>'; echo basename($path,' ...
- Find a way HDU - 2612
Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...
- ajax被cancel问题(事件冒泡)
发送ajax请求的时候发现ajax请求总是被cancel,但是请求却被执行了,查阅了知识之后,发现问题是:事件冒泡,记录下来,供自己和大家学习借鉴. 1. 前提,发出ajax的请求在form表单中 2 ...
- mysql排序的中文首字母排序和自定义排序
select * FROM organ_new where city_code = 'SZ0755' and organ_type = 'H' and state = '1' ORDER BY FIE ...
- VMware(虚拟机) 12版安装深度linux系统
需要的工具: 1.VM ware workstation12虚拟机(可自行百度下载) 参考:VMware Workstation 12.5.5 官方中文正式版,下载地址:http://www.epi ...