正则表达式简介
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
正则标记
如果想要研究正则表达式首先需要知道正则标记(元字符),在java中正则标记都在java.util.regex.Pattern类中进行了定义。
1、【单个】描述某一个字符
. x:表示由x(字符)所组成;
public static void main(String[] args){
String testA="a";
String testB="m";
String regex="a";
//输出true
System.out.println(testA.matches(regex));
//输出false
System.out.println(testB.matches(regex));
}
. \\:匹配"\";
public static void main(String[] args){
String testA="\\";
String testB="";
//第一组\\转义testA中第一个\第二个\\转义testA中第二个\
String regex="\\\\";
//输出true
System.out.println(testA.matches(regex));
//输出false
System.out.println(testB.matches(regex));
}
. \t:描述的是制表符;
.
\n:表示换行符;
2、【单个】描述一个范围
.
[abc]:表示a、b、c三个字符中的一个;
public class regexTest {
public static void main(String[] args){
String testA="a";
String testB="m";
String regex="[abc]";
//输出true
System.out.println(testA.matches(regex));
//输出false
System.out.println(testB.matches(regex));
}
}
.
[^abc]:表示除了abc三个字母以外的其他字母;
public static void main(String[] args){
String testA="c";
String testB="a";
String regex="[^ab]";
//输出true
System.out.println(testA.matches(regex));
//输出false
System.out.println(testB.matches(regex));
}
. [0-9]:表示"'0'~'9'"中的一个数字字符;
. [a-zA-Z]:由字母组成不区分大小写;
3、【单个】简化表达式
. ".": 表示任意一位字符
.
\d: 等价于"[0-9]"表示任意一位数字
.
\D: 等价于"[^0-9]"表示非任意一位数字
.
\s:表示是一位空格,可能是空格、\t、\n
.
\S:表示非空格非\t,非\n
。\w: 等价于"[a-zA-Z0-9_]",表示字母、数字、下划线所组成
。\W:等价与"[^a-zA-Z0-9_]"
4、边界匹配(java用不到)
。^:表示正则的开始
。$: 表示正则的结束
5、数量表达式,在之前所有的符号编写几次就能够出现几次,如果现在需要重复出现n次则就需要数量表达式
。正则?:表示该匹配出现0次或1次
。正则+:表示该匹配出现1次或多次
。正则*:表示该匹配出现0次、1次或多次
。正则{n}:表示该匹配出现正好n次
。正则{n,}:表示该匹配出现n次及以上
。正则{n,m}:表示匹配出现n~m次
public static void main(String[] args){
String testA="aaaa";
String testB="aa";
String testC="aaaaaaaaa";//9次
//a出现4到8次
String regex="a{4,8}";
//true
System.out.println(testA.matches(regex));
//false
System.out.println(testB.matches(regex));
//false
System.out.println(testC.matches(regex));
}
6、逻辑匹配
。正则A正则B:表示与的关系,在第一个匹配之后立即匹配第二个
。正则A|正则B:表示正则A或正则B出现一次
。(正则):按照一组正则进行处理
public static void main(String[] args){
String testA="aad";
String testB="123";
String testC="+==";
String testD="ad13";
//只出现字母或数字
String regex="([a-zA-Z]+)|([0-9]+)";
//true
System.out.println(testA.matches(regex));
//true
System.out.println(testB.matches(regex));
//false
System.out.println(testC.matches(regex));
//false
System.out.println(testD.matches(regex));
}
String类对正则的支持
实现字符串替换
public static void main(String[] args){
String string="dfbs!#$IUWDb@$ywf893(**r8923rffuhc=23%36^^&#*@^$";
String regex="[^a-zA-Z]";
System.out.println(string.replaceAll(regex, ""));
}
运行结果
字符串拆分
public static void main(String[] args){
String string="qwudi32384hwihuh98233203erwe432fwe04bfef";
//将字符串拆为不含数字的子串
String regex="\\d+";
String result[]=string.split(regex);
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
运行结果
验证某一个字符串是否是数字,如果是则将其转换为double
public static void main(String[] args){
String string="1101023";
String regex="\\d+(\\.\\d+)?";
if(string.matches(regex)){
double data=Double.parseDouble(string);
System.out.println(data);
}
}
运行结果