深入解析Java中的正则表达式使用技巧

更新:10-28 民间故事 我要投稿 纠错 投诉

很多朋友对于深入解析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,本文到此结束,如果可以帮助到大家,还望关注本站哦!

用户评论

oО清风挽发oО

我一直感觉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位网友表示赞同!

我没有爱人i

建议把正则表达式这部分内容放在Java学习的后期学习,先理解基本语法再学.

    有17位网友表示赞同!

颓废人士

感觉现在越来越多的领域都离不开正则表达式了,掌握这项技能真的很重要!

    有5位网友表示赞同!

【深入解析Java中的正则表达式使用技巧】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:探索心灵之窗:感悟与启示 下一篇:高效构建SaaS应用的8个关键步骤指南