什么是正则表达式
简单来说,正则表达式就是一种规范,用于字符串匹配,查找,替换
正则表达式的应用场景
在平时的编程中,我们会遇到这样的场景,判断一个身份证号的真伪,这里我们就可以用正则表达式来判断。
身份证号是有一定规则的,这个规则我们可以用正则表达式抽象出来,然后利用这个正则表达式去匹配输入的字符串即可
Java中如何用正则表达式
JDK1.4之后,Java自带了支持正则表达式的包,这个包下面有两个类
Pattern和Matcher
举个栗子,我们来匹配一个正整数
String regx="^[1-9]\\d*$";
String str="1111";
Pattern pattern=Pattern.compile(regx);
Matcher matcher=pattern.matcher(str);
Log.d("TAG","matche:"+matcher.matches());
Log.d("TAG","matche:"+matcher.find());
我们来解析一下这段代码
第一行,定义了正整数规则的正则表达式
第二行,写了一个带匹配的字符串
第三行,将正则表达式编译成java认识的模式
第四行,利用Matcher去和传入的字符串进行匹配
剩下的2行日志,是为了测试匹配的结果
其中matches的意思是整个字符串都符合正则的规则才返回ture
find的意思是只要字符串的子串符合正则的规则就返回true
Java正则表达式语法
^
放在最前面,表示匹配字符串的起始位置,如^a,则Aa,起始的字符串是A,因此不匹配,而aAA则匹配
放在[]里面,如[^0-9],意思是非数字
如果想匹配^,则可以使用^
$
意思和^一样,只不过它匹配的是字符传结尾的位置
[]
[]中的内容是可选字符,如[0-9]要求字符在0到9之间
()
对正则表达进行编组,在后面mather的group中会用到
括起来的算一个子表达式,如
^([a][b]){2}$ 匹配abab,即括号里面的整体出现2次
^[a][b]{2}$ 匹配abb,即{}限定符前面的b出现2次
|
匹配任意一个由竖线分割的字符
如b(a|i|e)d,匹配bad,bid,bed
{}
匹配它前面的子表达式出现的次数
如[0-9]{n},出现n次,[0-9]{n,m}出现n到m次
*
匹配它前面的子表达式零次或多次。要匹配 * 字符,请使用 *
+
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
.
匹配除换行符 \n 之外的任何单字符,要匹配 . ,请使用 .
?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?
\
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配 "("
\d
匹配一个数字字符。等价于 [0-9]
\D
匹配一个非数字字符。等价于 [^0-9]
\w
匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'
\W
匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]
大致先介绍这些,其他的可以自行百度
Java中Matcher的其它用法
group,用来捕获正则表达式中的组
public class RegexMatches
{
public static void main( String args[] ){
// 按指定模式在字符串查找
String line = "This order was placed for QT3000! OK?";
String pattern = "(\\D*)(\\d+)(.*)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
System.out.println("Found value: " + m.group(3) );
} else {
System.out.println("NO MATCH");
}
}
}
如上述代码group(0)代表整个正则表达式,group(1)代表第一个括号中饭的子表达式,依次类推...
输出结果
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000
Found value: ! OK?
网友评论