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

239

被折叠的 条评论
为什么被折叠?



