Java正则表达式是一种用于匹配、查找和替换字符串的强大工具。它是基于正则表达式语法的模式匹配引擎,并且提供了丰富的方法来处理字符串。
在Java中,使用java.util.regex包中的类来操作正则表达式。常用的类有Pattern和Matcher。
Pattern类表示一个正则表达式的编译表示。可以使用Pattern.compile()方法将正则表达式编译成Pattern对象。
Matcher类用于对输入字符串进行匹配操作。可以使用Pattern.matcher()方法创建Matcher对象,然后使用Matcher的各种方法进行匹配。
以下是一些常用的正则表达式操作示例:
- 匹配字符串是否符合某个模式:
Pattern pattern = Pattern.compile("abc");
Matcher matcher = pattern.matcher("abcdef");
boolean isMatch = matcher.matches();
System.out.println(isMatch); // 输出true
- 查找字符串中的匹配项:
Pattern pattern = Pattern.compile("abc");
Matcher matcher = pattern.matcher("abcdefg");
while (matcher.find()) {
System.out.println(matcher.group());
}
// 输出abc
- 替换字符串中的匹配项:
Pattern pattern = Pattern.compile("abc");
Matcher matcher = pattern.matcher("abcdefg");
String result = matcher.replaceAll("xyz");
System.out.println(result); // 输出xyzdefg
- 分割字符串:
String input = "apple,banana,orange";
String[] fruits = input.split(",");
for (String fruit : fruits) {
System.out.println(fruit);
}
// 输出apple、banana、orange
- 提取字符串中的子串:
Pattern pattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher matcher = pattern.matcher("2019-03-15");
if (matcher.find()) {
String year = matcher.group(1);
String month = matcher.group(2);
String day = matcher.group(3);
System.out.println(year); // 输出2019
System.out.println(month); // 输出03
System.out.println(day); // 输出15
}
这只是Java正则表达式的一小部分功能,还有更多的操作和语法可以用来完成更复杂的字符串处理任务。了解并熟练使用正则表达式可以提高字符串处理的效率和灵活性。
public class RegexTest {
public static void main(String[] args) {
// 1、字符类(只能匹配单个字符)
System.out.println("a".matches("[abc]")); // [abc]只能匹配a、b、c
System.out.println("e".matches("[abcd]")); // false
System.out.println("d".matches("[^abc]")); // [^abc] 不能是abc
System.out.println("a".matches("[^abc]")); // false
System.out.println("b".matches("[a-zA-Z]")); // [a-zA-Z] 只能是a-z A-Z的字符
System.out.println("2".matches("[a-zA-Z]")); // false
System.out.println("k".matches("[a-z&&[^bc]]")); // : a到z,除了b和c
System.out.println("b".matches("[a-z&&[^bc]]")); // false
System.out.println("ab".matches("[a-zA-Z0-9]")); // false 注意:以上带 [内容] 的规则都只能用于匹配单个字符
// 2、预定义字符(只能匹配单个字符) . \d \D \s \S \w \W
System.out.println("徐".matches(".")); // .可以匹配任意字符
System.out.println("徐徐".matches(".")); // false
// \转义
System.out.println("\"");
// \n \t
System.out.println("3".matches("\\d")); // \d: 0-9
System.out.println("a".matches("\\d")); //false
System.out.println(" ".matches("\\s")); // \s: 代表一个空白字符
System.out.println("a".matches("\\s")); // false
System.out.println("a".matches("\\S")); // \S: 代表一个非空白字符
System.out.println(" ".matches("\\S")); // false
System.out.println("a".matches("\\w")); // \w: [a-zA-Z_0-9]
System.out.println("_".matches("\\w")); // true
System.out.println("徐".matches("\\w")); // false
System.out.println("徐".matches("\\W")); // [^\w]不能是a-zA-Z_0-9
System.out.println("a".matches("\\W")); // false
System.out.println("23232".matches("\\d")); // false 注意:以上预定义字符都只能匹配单个字符。
// 3、数量词: ? * + {n} {n, } {n, m}
System.out.println("a".matches("\\w?")); // ? 代表0次或1次
System.out.println("".matches("\\w?")); // true
System.out.println("abc".matches("\\w?")); // false
System.out.println("abc12".matches("\\w*")); // * 代表0次或多次
System.out.println("".matches("\\w*")); // true
System.out.println("abc12张".matches("\\w*")); // false
System.out.println("abc12".matches("\\w+")); // + 代表1次或多次
System.out.println("".matches("\\w+")); // false
System.out.println("abc12张".matches("\\w+")); // false
System.out.println("a3c".matches("\\w{3}")); // {3} 代表要正好是n次
System.out.println("abcd".matches("\\w{3}")); // false
System.out.println("abcd".matches("\\w{3,}")); // {3,} 代表是>=3次
System.out.println("ab".matches("\\w{3,}")); // false
System.out.println("abcde徐".matches("\\w{3,}")); // false
System.out.println("abc232d".matches("\\w{3,9}")); // {3, 9} 代表是 大于等于3次,小于等于9次
// 4、其他几个常用的符号:(?i)忽略大小写 、 或:| 、 分组:()
System.out.println("abc".matches("(?i)abc")); // true
System.out.println("ABC".matches("(?i)abc")); // true
System.out.println("aBc".matches("a((?i)b)c")); // true
System.out.println("ABc".matches("a((?i)b)c")); // false
// 需求1:要求要么是3个小写字母,要么是3个数字。
System.out.println("abc".matches("[a-z]{3}|\\d{3}")); // true
System.out.println("ABC".matches("[a-z]{3}|\\d{3}")); // false
System.out.println("123".matches("[a-z]{3}|\\d{3}")); // true
System.out.println("A12".matches("[a-z]{3}|\\d{3}")); // false
// 需求2:必须是”我爱“开头,中间可以是至少一个”编程“,最后至少是1个”666“
System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+"));
System.out.println("我爱编程编程66666".matches("我爱(编程)+(666)+"));
}
}