Java正则表达式语法大全
- 编程知识
- 2023-05-26
- 10
Java中的正则表达式是用来处理字符串的一种强大工具。正则表达式可以用来在文本中搜索、替换、匹配、验证等操作。在Java中,使用java.util.regex包中的类来处理正则表达式。
一、正则表达式概述
正则表达式是一系列字符和字符组合的模式,用来匹配、查找和替换文本。这些模式可以用来检查输入字符串是否与某种模式匹配、搜索输入字符串中的匹配模式、以及在输入字符串中搜索和替换模式。
在Java中,正则表达式是由两个主要类组成,第一个是Pattern,它表示正则表达式的编译后的模式。第二个是Matcher,它是用来匹配一个输入字符串和这个模式的。
在编写正则表达式时,一些基本字符具有特殊含义,这些字符在正则表达式中有特殊的用法。例如,正则表达式中的元字符 \d 表示任何一个数字。因为某些字符在正则表达式中具有特殊含义,它们需要通过反斜杠进行转义,例如 \d 表示匹配一个数字(0-9)。
二、正则表达式语法
Java中的正则表达式语法中有许多不同元字符、字符类和修饰符,这些元素可以组合在一起来生成非常复杂的表达式,下面是一些常见的元字符、字符类和修饰符:
1.元字符
元字符是正则表达式中的特殊字符,下面是一些常见的元字符:
\
:用来对下一个字符进行转义,例如 \d 表示匹配一个数字。.
:表示任何字符。^
:表示字符串的开始。$
:表示字符串的结束。*
:表示重复 0 或多次。+
:表示重复 1 或多次。?
:表示重复 0 或 1 次。{n}
:表示重复 n 次。{n,}
:表示重复 n 次或更多次。{n,m}
:表示重复 n 到 m 次。|
:表示或。[]
:表示字符集合。()
:表示捕获组。
2.字符类
字符类是用来匹配一个特定的字符集合,下面是一些常见的字符类:
\d
:表示任何一个数字(0-9)。\w
:表示任何一个单词字符(字母、数字或下划线)。\s
:表示任何一个空白字符(空格、制表符、换行符等)。\D
:表示任何一个非数字字符。\W
:表示任何一个非单词字符。\S
:表示任何一个非空白字符。[abc]
:表示匹配字符 a、b 或 c。[^abc]
:表示匹配除了字符 a、b 或 c 以外的任何字符。[a-z]
:表示匹配小写字母 a 到 z 中的任何一个字符。[A-Z]
:表示匹配大写字母 A 到 Z 中的任何一个字符。[0-9]
:表示匹配数字 0 到 9 中的任何一个字符。
3.修饰符
修饰符用来改变正则表达式默认的匹配行为,下面是一些常见的修饰符:
i
:表示不区分大小写。m
:表示多行模式。s
:表示dotall模式,允许 . 匹配任何字符,包括换行符。x
:表示忽略空白模式,忽略空格字符并启用注释。
三、代码示例
1.单个匹配
String pattern = "foo";
String input = "foobar";
boolean isMatch = Pattern.matches(pattern, input);
System.out.println(isMatch); // true
2.多个匹配
String pattern = "\\d+";
String input = "123 456 789";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group());
}
// Output: 123 456 789
3.替换匹配
String pattern = "\\bcat\\b";
String input = "The cat is black.";
String replacement = "dog";
String output = input.replaceAll(pattern, replacement);
System.out.println(output); // The dog is black.
4.捕获组
String pattern = "(\\d{3})-(\\d{4})";
String input = "123-4567";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
if (m.find()) {
String group1 = m.group(1); // 123
String group2 = m.group(2); // 4567
System.out.println(group1);
System.out.println(group2);
}
5.贪婪模式
String pattern = ".*foo";
String input = "xfooxxxxxxfoo";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
if (m.find()) {
System.out.println(m.group()); // xfooxxxxxxfoo
}
6.非贪婪模式
String pattern = ".*?foo";
String input = "xfooxxxxxxfoo";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
if (m.find()) {
System.out.println(m.group()); // xfoo
}
7.字符类
String pattern = "[aeiou]";
String input = "The quick brown fox jumps over the lazy dog.";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
StringBuffer buffer = new StringBuffer();
while (m.find()) {
m.appendReplacement(buffer, m.group().toUpperCase());
}
m.appendTail(buffer);
System.out.println(buffer.toString()); // ThE qUIck brOwn fOx jUmps OvEr ThE lAzy dOg.
8.忽略空白
String pattern = "(?i)hello\\s+world";
String input = "Hello World";
Pattern p = Pattern.compile(pattern, Pattern.COMMENTS);
Matcher m = p.matcher(input);
if (m.find()) {
System.out.println("Match found");
}
四、总结
Java正则表达式提供了一种强大的工具来处理文本。了解正则表达式的语法和常见的元字符、字符类和修饰符,可以帮助我们更好地理解和编写正则表达式。Pattern和Matcher类是处理正则表达式的核心类,在实际编程中需要灵活使用。通过本篇文章的介绍,相信大家已经掌握了Java正则表达式的基本用法和常见应用,可以用于实际项目中的开发。