言成言成啊 | Kit Chen's Blog

正则表达式-继续版

发布于2023-12-27 23:29:04,更新于2023-12-28 16:35:27,标签:java regex  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

正则表达式中,整理元素的含义列表如下

元素含义
*重复0次或者多次
+重复1次或者多次
?重复0次或者1次
.匹配任意字符,除了换行符
^匹配字符串开头
$匹配字符串结尾
-表示字符范围。如a-z,表示选择字母的范围为从a到z
[…]匹配中括号内任意一个字符
[^…]匹配中括号内除列举的字符以外的任意字符
(…)捕获分组,用于匹配并捕获匹配字符串的部分
(?:…)非捕获分组,用于匹配且不捕获匹配字符串的部分。可以提高正则表达式的性能,减少内存开销
|逻辑or,匹配左右任意一个表达式
\d匹配任意数字,相当于[0-9]
\D\d的else含义
\w匹配任意字母、数字、下划线,相当于[a-zA-Z0-9_]
\W\w的else含义
\s匹配任意空白字符,包括空格、制表符等
\S\s的else含义
\b匹配一个单词的边界,即单词字符和非单词字符之间的位置。一个单词字符是指字母、数字或下划线。
\B\b的else含义,即两个单词字符或两个非单词字符之间的位置。
{n}匹配前一个元素n次
{n,}匹配前一个元素至少n次
{n,m}匹配前一个元素至少n次,但不超过m次

元素的优先级顺序如下

优先级元素
1()
2\
3{}、 *、 +、 ?
4^、 $、 \b、 \B
5[]、 -
6|

验证\b\B

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
String input1 = "!word";
String input2 = "aword!";
String regex = "\\Bword\\b";
Pattern pattern = Pattern.compile(regex);
// false
// !与w是非单词字符和单词字符,属于\b, d与结尾属于单词字符与非单词字符,属于\b
System.out.println(pattern.matcher(input1).find());
// true
// a与w是单词字符和单词字符,属于\B,d与!是单词字符和非单词字符,属于\b
System.out.println(pattern.matcher(input2).find());
}

验证(...)(?:...)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static void test2() {
//使用捕获分组
String c = "(\\d{3})-(\\d{3}-\\d{4})";
//使用非捕获分组
String nc = "(?:\\d{3})-(\\d{3}-\\d{4})";

String phoneNumber = "123-456-7890";

Pattern cPattern = Pattern.compile(c);
Matcher cMatcher = cPattern.matcher(phoneNumber);
if (cMatcher.matches()) {
System.out.println("捕获分组结果: ");
System.out.println("区号: " + cMatcher.group(1));
System.out.println("电话号码: " + cMatcher.group(2));
} else {
System.out.println("未匹配");
}
System.out.println();

Pattern ncPattern = Pattern.compile(nc);
Matcher ncMatcher = ncPattern.matcher(phoneNumber);
if (ncMatcher.matches()) {
System.out.println("非捕获分组结果: ");
System.out.println("电话号码: " + ncMatcher.group(1));
} else {
System.out.println("未匹配");
}
}
发布:2023-12-27 23:29:04
修改:2023-12-28 16:35:27
链接:https://meethigher.top/blog/2023/regex/
标签:java regex 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏