很多朋友对于深入解析Java中的正则表达式使用技巧和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
英文句点符号:匹配单个任意字符。
例如:
表达式“t.o”可以匹配:tno、t#o、teo等,不能匹配:tnno、to、Tno、t正o等。 方括号:只有方括号中指定的字符参与匹配,并且只能匹配单个字符。
例如:
表达式:t[abcd]n 只能匹配:tan、tbn、tcn、tdn。无法匹配:thn、tabn、tn 等|象征。相当于“or”,可以匹配指定的字符,但只能选择其中一个进行匹配。
例如。
表达式:t(a|b|c|dd)n 只能匹配:tan、tbn、tcn、tddn。无法匹配表示匹配次数的taan、tn、tabcn 符号
截图2016-10-26 10.42.53.png
{n, }表示至少N次。
例如。
表达式:[0—9]{ 3 } — [0-9]{ 2 } — [0-9]{ 3 } 匹配格式为:999—99—999
由于“-”符号在正则表达式中具有特殊的含义,它代表一个范围,所以在前面添加了转义符“”。
^符号:表示否
符号称为“否”符号,如果在方括号内使用,则“”表示不打算匹配的字符。
例如。
表达式:[^x] 第一个字符不能是x 括号或空格字符
“s”是一个空白符号。它只能匹配空格、制表符、回车符或换页符。它不能匹配您输入的多个空格。
() 是组号,您可以使用ORO API 提取该值。正则表达式的一些快捷符号稍后会详细讨论:
d 表示[0-9],D 表示[^0-9],w 表示[0-9A-Z_a-z],
W 代表[^0—9A—Z_a—z],s 代表[tnrf],S 代表[^tnrf]。一些常用的正则表达式:
Java: (([a-z]|_)(w*)){6,20} 匹配以字母或下划线开头并以字母数字下划线结尾的字符串
JavaScript: /(-?)(d+)$/匹配数字。 /w+$/匹配字母数字下划线。
.+ 一个或多个字符
/0 在第一个匹配的字符串java 类中使用正则表达式:
例如1:
模式p=Pattern.compile("t.n");
匹配器m=p.matcher("ton");
if(m.matches()){
返回真;
}
例如2:boolean bool=Pattern.matches(“t.n”,“ton”);
如果要重复使用正则表达式,请使用第一个正则表达式。如果只匹配一次,则第二次是最佳选择。反斜杠字符(‘’)用于转义字符,也可以引用未转义的字符(不包括未转义的字母)
因此‘’表示‘’,‘{’表示{。但"y" 是错误的,因为在任何不代表转义结构的字母字符之前使用反斜杠是错误的。
根据Java 语言规范的要求,Java 源代码中字符串中的反斜杠被解释为Unicode 转义符或其他字符转义符。因此,必须在字符串文字中使用两个反斜杠来指示正则表达式免受Java 字节码编译器的解释。例如,当解释为正则表达式时,字符串文字"b" 匹配单个退格字符,而"b" 匹配单词边界。字符串文字“(hello)”是非法的,会导致编译时错误;要匹配字符串(hello),必须使用字符串文字"(hello)"。注:‘b’为1 个字符,‘b’为2 个字符。 Pattern类有8种模式:如启用多行模式、启用unix模式等,例如int CASE_INSENSITIVE表示启用4个不区分大小写的静态方法
两个单例模式构造函数:
模式编译(字符串正则表达式);
模式编译(String regex, int flags) flags 是八种模式之一
例如2:
模式p=Pattern.compile("[a-z]s[a-z]");
匹配器m=p.matcher("b c");
if(m.matches()) Sysout(1111);
否则系统输出(2222);输出结果为1111;
匹配方法,返回字符串的文字模式方法:
boolean matches(String regex,CharSequence input);//输入与正则表达式匹配
匹配返回true。
String quote(String s);//返回指定String的字面值。
例如3: boolean bool=Pattern.matches("[a-z] [a-z]","b c"); //结果为真
Sysout(Pattern.quote("a_#/tb")); //输出结果为“Qa_#b”E6普通方法
返回此模式的匹配器:Matcher matcher(CharSequence input);
返回此模式的标志:int flags();
返回此模式的正则表达式:String pattern();
两种字符串切割方法: String[] split(CharSequence input);
String[] split(CharSequence input,int limit);
limit 是返回字符串的数量。如果等于0,则返回所有分割字符串。如果大于实际分割字符串的数量,
返回实际数字。
toString方法:String toString();
例如4:
模式p=Pattern.compile("[,s]");
String str="wo,ai;ni哈哈";
String[] strs=p.split(str);
for(字符串s : strs){
Sysout(s);//输出“wo”“ai”“ni”“haha”
}
strs=p.split(str,2)
for(字符串s : strs){
Sysout(s);//输出“wo”“ai;ni哈哈”
}
strs=p.split(str,0)
for(字符串s : strs){
Sysout(s);//输出“wo”“ai”“ni”“haha”
}常用正则表达式"^d+$"//非负整数(正整数+0)"^[0-9][1-9][0-9]$"//正整数"^(( -d+)|(0+))$"//非正整数(负整数+0)"^-[0-9][1-9][0-9]$"//负整数"^ - ?d+$"//整数"^d+(.d+)?$"//非负浮点数(正浮点数+ 0)"^(([0-9]+.[0 -9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9 ][0- 9]))$"//正浮点数"^((-d+(.d+)?)|(0+(.0+)?))$"//非正浮点数点数(负浮点数+ 0)"^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9] [0-9].[0-9]+)|([0-9][1-9][0-9])))$"//负浮点数"^(-?d+)( .d+)?$"//浮点数"^[A-Za-z]+$"//由26个英文字母组成的字符串"^[A-Z]+$"//由26个大写英文字母组成的字符串" ^[ a-z]+$"//由26个小写英文字母组成的字符串"^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串"^w+$"//由数字、26个英文字母或下划线组成的字符串"^[w-]+(.[w-]+)*@[w-]+(.[w-]+) +$"//电子邮件地址"^[a-zA-z]+://(w+(-w+))(.(w+(-w+)))(?S)?$"//url/^( d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-((0-2)|(3 [0|1] ))$///年-月-日/^((0([1-9]{1}))|(1[1|2]))/((0-2)| (3[0|1]))/(d{2}|d{4})$///月/日/年"^([w-.]+)@(([[0-9]{ 1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{ 2,4}|[0-9]{1,3})(]?)$" //埃米尔/^((+?[0-9]{2,4}-[0-9]{3, 4}-)|([0-9]{3,4}-))?([0-9]{7,8})(-[0-9]+)?$///电话号码"^ (d{1,2}|1dd|2[0-4]d|25[0-5])。(d{1,2}|1dd|2[0-4]d|25[0-5] ).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0- 5])$" //IP地址匹配汉字正则表达式: [u4e00-u9fa5] 匹配双字节字符(包括汉字): [^x00-xff] 匹配空行的正则表达式公式: n[s| ]*r正则表达式匹配HTML标签: /(.).1|(.*) //正则表达式匹配前导空格和尾随空格: (^s)|(s$) 正则表达式匹配邮件地址: w+ ([-+.]w+)@w+([-.]w+).w+([-.]w+)* 正则表达式匹配URL表达式:^[a-zA-z]+://(w+(-w+))(.(w+(-w+)))(?S)?$ 匹配的账户是否合法(以字母开头,允许5-16个字节,允许字母数字下划线): ^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配国内电话号码:(d{3} -|d{4}-)?(d{ 8}|d{7})?匹配腾讯QQ号码:^[1-9][1-9][0-9]$ 更改下一个字符被标记为特殊字符,或者文字字符,或者反向引用,或者八进制转义字符。 ^ 匹配输入字符串的开头。如果设置了RegExp 对象的Multiline 属性,^ 也会匹配"n" 或"r" 之后的位置。 $ 匹配输入字符串的结尾。如果设置了RegExp 对象的Multiline 属性,$ 也会匹配‘n’或‘r’之前的位置。匹配前面的子表达式零次或多次。匹配前面的子表达式一次或多次。 + 相当于{1,}。匹配前面的子表达式零次或一次。相当于{0,1}。 {n} n 是一个非负整数,匹配一定次数的n 次。 {n,} n 是一个非负整数,至少匹配n 次。 {n,m} m 和n 都是非负整数,其中n=m。至少匹配n 次,最多匹配m 次。逗号和两个数字之间不能有空格。当字符紧跟在任何其他限定符(*、+、{n}、{n,}、{n,m})之后时,匹配模式是非贪婪的。非贪婪模式尽可能匹配搜索到的字符串,而默认贪婪模式则尽可能匹配搜索到的字符串。匹配除"n" 之外的任何单个字符。要匹配包括“n”在内的任何字符,请使用“[.n]”等模式。 (pattern) 匹配pattern并获得匹配。 (?pattern) 匹配到了pattern,但是没有得到匹配结果,也就是说这是一次非获取匹配,不存储以备后用。
(?=pattern) 正向查找,匹配任何匹配模式的字符串开头的搜索字符串。这是非获取匹配,即不需要获取该匹配以供以后使用。
(?pattern) 负向查找,与(?=pattern) x|y 相反,匹配x 或y。 [xyz] 字符集。 [^xyz] 负值字符集。 [a-z] 字符范围,匹配指定范围内的任意字符。 [^a-z] 负字符范围,匹配不在指定范围内的任何字符。 b 匹配单词边界,即单词和空格之间的位置。 B 匹配非单词边界。 cx 匹配x 指定的控制字符。 d 匹配数字字符。相当于[0-9]。 D 匹配非数字字符。相当于[^0-9]。 f 匹配换页符。相当于x0c 和cL。 n 匹配换行符。相当于x0a 和cJ。 r 匹配回车符。相当于x0d 和cM。 s 匹配任何空白字符,包括空格、制表符、换页符等。相当于[fnrtv]。 S 匹配任何非空白字符。相当于[^fnrtv]。 t 匹配制表符。相当于x09 和cI。 v 匹配垂直制表符。相当于x0b 和cK。 w 匹配任何包含下划线的单词字符。相当于“[A-Za-z0-9_]”。 W 匹配任何非单词字符。相当于“[^A-Za-z0-9_]”。 xn 匹配n,其中n 是十六进制转义值。十六进制转义值的长度必须正好是两位数。 num 匹配num,其中num 是正整数。对所获得的匹配的引用。 n 标识八进制转义值或反向引用。如果n 前面至少有n 个获取的子表达式,则n 是反向引用。否则,如果n 是八进制数(0-7),则n 是八进制转义值。 nm 标识八进制转义值或反向引用。如果nm 前面至少有nm 个获取的子表达式,则nm 是反向引用。如果nm 前面至少有n 个get,则n 是后跟文字m 的反向引用。如果前面的条件都不成立,则如果n 和m 都是八进制数字(0-7),则nm 将匹配八进制转义值nm。 nml 如果n 是八进制数字(0-3),并且m 和l 都是八进制数字(0-7),则匹配八进制转义值nml。 un 匹配n,其中n 是由四个十六进制数字表示的Unicode 字符。匹配汉字的正则表达式:[u4e00-u9fa5] 匹配双字节字符(包括汉字):[^x00-xff] 匹配空行的正则表达式:n[s| ]*r 匹配HTML标签正则表达式: /(.).1|(.*) //匹配前导空格和尾随空格的正则表达式: (^s)|(s$) 匹配邮件地址的正则表达式: w+([-+ .]w+ )@w+([-.]w+).w+([-.]w+)*正则表达式匹配URL:http://([w-]+.)+[w-]+(/[w- ./?%=]*)?使用正则表达式限制网页表单中文本框的输入内容:使用正则表达式限制仅中文输入:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g, "")" onbeforepaste="clipboardData.setData("text",clipboardData.getData("text").replace(/[^u4E00-u9FA5]/g,""))" 使用正则表达式将输入限制为仅全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,"")" onbeforepaste="clipboardData.setData("text",clipboardData.getData("text").replace (/[^uFF00-uFFFF]/g,""))"正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,"") "onbeforepaste="clipboardData .setData("文本",clipboardData.getData("文本").replace(/[^d]/g,""))"
使用正则表达式限制只能输入数字和英文: onkeyup="value=value.replace(/[W]/g,"") "onbeforepaste="clipboardData.setData("text",clipboardData.getData("text") ).replace(/[^d]/g,""))"组织:
匹配汉字的正则表达式:[u4e00-u9fa5]
匹配双字节字符(包括汉字):[^x00-xff]
匹配空行的正则表达式:n[s| ]r
正则表达式匹配HTML 标签:/(.).1|(.) //
匹配前导空格和尾随空格的正则表达式:(^s)|(s$)
正则表达式匹配IP地址:/(d+).(d+).(d+).(d+)/g //
匹配电子邮件地址的正则表达式:w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*
匹配URL 的正则表达式:http://(/[w-]+.)+[w-]+(/[w- ./?%=])?
SQL语句:^(选择|删除|删除|创建|更新|插入).$
1.非负整数:^d+$
2.正整数:^[0-9][1-9][0-9]$
3.非正整数:^((-d+)|(0+))$
4.负整数:^-[0-9][1-9][0-9]$
5. 整数:^-?d+$
6.非负浮点数:^d+(.d+)?$
7、正浮点数:^((0-9)+.[0-9][1-9][0-9])|([0-9][1-9][0-9]。 [ 0-9]+)|([0-9][1-9][0-9]))$
8. 非正浮点数:^((-d+.d+)?)|(0+(.0+)?))$
9.负浮点数:^(-((正浮点数正则表达式)))$
10. 英文字符串:^[A-Za-z]+$
11. 英文大写字符串:^[A-Z]+$
12.英文小写字符串:^[a-z]+$
13、英文字符和数字串:^[A-Za-z0-9]+$
14. 字母数字加下划线字符串:^w+$
15. 电子邮件地址:^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$
16. 网址: ^[a-zA-Z]+://(w+(-w+))(.(w+(-w+)))(?s)?$
或者:http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-_~`@[]":+!]*([""])*$
17. 邮政编码:^[1-9]d{5}$
18. 中文:^[u0391-uFFE5]+$
19. 电话号码:^(((d{2,3}))|(d{3}-))?((0d{2,3})|0d{2,3}- )?[1-9]d{6,7}(-d{1,4})?$
20. 手机号码: ^(((d{2,3}))|(d{3}-))?13d{9}$
21、双字节字符(包括汉字):^x00-xff
22、匹配前导空格和尾随空格:(^s)|(s$)(类似vbscript的trim函数)
23、匹配HTML标签:(.).1|(.*)/
24. 匹配空行:n[s| ]*r
25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *=*("|")?(w||/|.)+( "|"| *|)?
26. 提取邮件中的电子邮件地址:w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*
27、提取信息中的图片链接:(s|S)(r|R)(c|C) *=*("|")?(w||/|.)+("|"| *|)?
28.提取信息中的IP地址:(d+).(d+).(d+).(d+)
29、提取信息中的中国手机号码:(86)013d{9}
30、提取信息中的中国固定电话号码:((d{3,4})|d{3,4}-|s)?d{8}
31、从信息中提取中国电话号码(包括手机和座机):((d{3,4})|d{3,4}-|s)?d{7,14}
32、提取信息中的中国邮政编码:[1-9]{1}(d+){5}
33、提取信息中的浮点数(即小数):(-?d*).d+
34、提取信息中任意数字:(-?d*)(.d+)?
35. IP地址:(d+).(d+).(d+).(d+)
36. 电话区号:/^0d{2,3}$/
37.腾讯QQ号:^[1-9][1-9][0-9]$
38. 帐号(以字母开头,允许5-16字节,允许字母数字和下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!
【深入解析Java中的正则表达式使用技巧】相关文章:
用户评论
我一直感觉Java中的正则表达式太复杂了...
有5位网友表示赞同!
学习正则表达式的网站那么多,哪个最适合Java呢?
有20位网友表示赞同!
有没有什么好的技巧可以让我更快速地理解正则表达式?
有7位网友表示赞同!
在Java项目中经常要用到正则表达式匹配,真是一门必备的技能!
有5位网友表示赞同!
做题的时候看到复杂的正则表达式就发愁...
有18位网友表示赞同!
想用Java写一个功能强大的文本处理程序,正则表达式是关键啊!
有19位网友表示赞同!
感觉掌握了Java正则表达式,编程能力就能提升一大截。
有11位网友表示赞同!
正则表达式这块内容让我挠头了好久...
有19位网友表示赞同!
分享一下你们平时使用Java正则表达式的例子吧!
有8位网友表示赞同!
刚开始学习Java的时候遇到了正则表达式这关,到现在都没完全搞懂...
有16位网友表示赞同!
想知道Java和Python的正则表达式有什么区别?
有16位网友表示赞同!
有哪些好用的Java正则表达式库可以推荐吗?
有17位网友表示赞同!
在面试的时候经常会遇到Java正则表达式的问题,想提前备课。
有19位网友表示赞同!
看不懂那些正则表达式的符号什么意思...
有7位网友表示赞同!
有没有哪些简单易懂的Java正则表达式教程?
有8位网友表示赞同!
用Java正则表达式可以实现很多有趣的文本操作,比如解析网页或者提取信息。
有7位网友表示赞同!
建议把正则表达式这部分内容放在Java学习的后期学习,先理解基本语法再学.
有17位网友表示赞同!
感觉现在越来越多的领域都离不开正则表达式了,掌握这项技能真的很重要!
有5位网友表示赞同!