java 正则表达式

本文详细介绍了Java中正则表达式的使用,包括d、[]、{}、.、*、+、?等特殊字符的含义及应用。通过实例演示了如何匹配数字、字母、特定字符组合,并解释了范围、次数限制、或操作符以及转义字符的用法。

\d 表示匹配一位数字,在java中\表示转义字符,但正则表达式中需要的是\d这个字符,所以需要再加一个\,用\\d来表示。

System.out.println("1".matches("\\d"));//true

中括号[]代表范围,大括号{}代表出现的次数。

[a-z]表示匹配小写字母a到z中的一个字母。

[a-z]{3}表示匹配3个a到z的字母。

System.out.println("a".matches("[abc]"));//true
System.out.println("a".matches("[a-z]"));//true

[a-z]{3,}表示匹配3个或3个以上a到z的字母。

System.out.println("abcdef".matches("[a-z]{3,}"));//true

[a-z]{3,5}表示匹配3个到5个a到z的字母。

System.out.println("abcdef".matches("[a-z]{3,5}"));//false

. 代表匹配任意一个字符

System.out.println("abc".matches("..."));//true

* 代表匹配0个或多个相同字符

System.out.println("aaa".matches("a*"));//true

+ 代表匹配1个或多个相同字符

System.out.println("aaa".matches("a+"));//true

? 代表匹配0个或1 个相同字符

System.out.println("aaa".matches("a?"));//false

System.out.println("".matches("a?"));//true

System.out.println("123456789".matches("\\d{1,10}"));//true

System.out.println("192.168.0.1".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//true \\d{1,3}表示匹配1-3个数字 \\.表示匹配一个.

System.out.println("255".matches("[0-2][0-9][0-9]"));//true 匹配三位数字 第一位0-2,第二位0-9,第三位0-9

 

1    字面值转义    \x
2    分组[...]
3    范围a-z
4    并集[a-e][i-u]
5    交集[a-z&&[aeiou]]

 

System.out.println("a".matches("[^abc]"));//false
//下面三者相同
System.out.println("A".matches("[a-zA-Z]"));//true
System.out.println("A".matches("[a-z]|[A-Z]"));//true
System.out.println("A".matches("[a-z[A-Z]]"));//true
System.out.println("P".matches("[A-Z&&[PFG]]"));//A-Z中的并且是PFG中的一个   true

 

 

\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]


System.out.println(" \n\r\t".matches("\\s{4}"));//true
System.out.println(" ".matches("\\S"));//false
System.out.println("a_8".matches("\\w{3}"));//true
System.out.println("\\".matches("\\\\"));//true  正则表达式中四个\匹配一个\

 

 

 

 

^行的开头
$行的结尾
\b单词边界
\B非单词边界
\A输入的开头
\G上一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符(如果有的话)
\z输入的结尾

System.out.println("hello world".matches("^h.*"));//true  以h开头,后面多个任意字符
System.out.println("hello world".matches(".*ld$"));//true 前面多个任意字符,以ld结尾
System.out.println("hello world".matches("^h[a-z]{1,3}o\\b.*"));//true  以h开头,中间一到三个a-z的字母,接着一个o,然后一个单词边界(单词边界为一个空格等等)

 

竖线 | 表示或

竖线|表示要么是左边,要么是右边,而无论左边和右边有多少个字符。如果在括号()中使用,那么竖线|的作用范围就被限定于括号中了。
比如正则表达式"This cat|dog is mine"。很多人会误以为它可以精确匹配句子"This cat is mine" 或 "This dog is mine". 事实上,它只能匹配"This cat" 或 "dog is mine"。如果要正确匹配,要使用"This (cat|dog) is mine". 这样就把竖线的作用域限定到括号中,而不是整个句子了。
在某些情况下,问题可能更隐蔽。比如想要匹配"This [cat] is mine"或者"This [dog] is mine"。正确的正则表达式写法是"This \[(cat|dog)\] is mine", 而不是"This (\[cat|dog\]) is mine",更加不是"This \[cat|dog\] is mine"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值