java正则表达式
正则表达式,又称规则表达式,计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式语法
基本介绍
如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:
- 限定符
- 选择匹配符
- 分组组合和反向引用符
- 特殊字符
- 字符匹配符
- 定位符
元字符( Metacharacter)-转义号 \\
\\ 符号说明:在我们使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。案例:用去匹配“abc$("会怎样?
再次提示
在Java的正则表达式中,两个\\代表其他语言中的一个\
需要用到转义符号的字符有以下: . * + () $ / \ ? [ ] ^ { }
· 元字符
java正则表达式是怎么用的?
(这里太过高深不做详解)
正则表达式为一个字符串,其中[]内的部分代表其中的任意字符。例如[abc]代表a或b或c。我们还可以用[a-z]这种形式代表某一字符区间。
有了正则表达式,我们能很简洁的去匹配、替换、切割字符串。
(1)查找
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
//要匹配的字符
String str = "131bcd6fgij";
//正则表达式
//这里代表第一个字符为1,第二个字符为2,3,7,8,后面9个为小写字母或数字,且不为5或者h
String regex = "1[2378][1-46-9a-gi-z]{9}";
//直接写
boolean flag1 = str.matches("1[2378][1-46-9a-gi-z]{9}");
System.out.println(flag1);
//或者
boolean flag2 = Pattern.matches(regex, str);
System.out.println(flag2);
//再或者将给定的正则表达式编译为模式。
Pattern p = Pattern.compile(regex);
//创建一个匹配器,匹配给定的输入与此模式。
Matcher m = p.matcher(str);
//尝试将整个区域与模式进行匹配。
boolean flag3 = m.matches();
//输出匹配结果,此次结果为true
System.out.println(flag3);
}
}
(2)替换
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
//要匹配的字符
String str = "12a6B985Ccv65";
//正则表达式
String regex = "[a-zA-Z]+";
//正则表达式
String regex2 = "\\d+";
//将字符串中英文字母替换为&符号,输出12&6&985&&&65
System.out.println(str.replaceAll("[a-zA-Z]", "&"));
//将字符串中连续英文字母替换为&符号,输出12&6&985&65
System.out.println(str.replaceAll(regex, "&"));
//将字符串中单个数字替换为0,输出00a0B000Ccv00
System.out.println(str.replaceAll("\\d","0"));
//将字符串中单个数字或者连续的数字替换为0,输出0a0B0Ccv0
System.out.println(str.replaceAll(regex2,"0"));
}
}
(3)切割
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
// 要切割的字符
String str = "2a6B5C65q9";
// 根据单个数字或者连续数字切割字符串
String []arr = str.split("\\d+");
System.out.println(arr.length);
for (String s : arr) {
System.out.println(s);
}
// 根据单个数字来切割字符串
arr = str.split("\\d");
System.out.println(arr.length);
for(String s : arr) {
System.out.println(s);
}
}
}
开头存在数字,导致最终分割结果在开头会多空的字符串。