正则表达式小总结
对于正则表达式,大学的时候就学过不过因为没有仔细的好好听课,导致工作后很长一段时间还是不是很熟悉,所以特意抽出个时间来总结一下用法。
常规匹配方式:
String.matcher()方法,括号内放正则表达式 java中所有 \ 都需要 \ 双引号
\d:任意一个数字0-9
\s:任意一个空白字符,或换行符
\w:任意一个字符 0-9 a-z A-Z 或下划线
tip:如果d,s,w为大写那么就是求反向
例:\D即匹配一个非数字
. :表示匹配任意一个字符,仅限一个
如果匹配中文就用\u####表示
a\u548cc可以匹配a和c \u548c 为 ‘和’
\d* 可以匹配认识个字符,包括0字符,即0到任意个
\d+ 匹配1到任意个(至少一个)
\d? 可以匹配0或一个字符 例A? 可以匹配 空和A
\d{3} 可以匹配3个连着的数字
\d{3,5}可以匹配3-5个连着的数字
\d{{3,}可以匹配3个以上数字
\d{0,3}最多匹配3个数字
[abc]:匹配方括号内任意一个字符
[a-zA-Z0-9]:匹配指定范围内字符
[^A-F]:指定范围以外字符
A\sB|A\sC|A\sD :匹配 A B或A C或A D
上面表达式提取后 A\s(B|C|D)
^匹配开头,美元符号匹配结尾
^在方括号内的话代表取反 [^0-9]表示匹配一个非数字
^A\d+B[美元符号]表示匹配A开头的B结尾的字符串,中间包含的是任意1到多个数字
分组匹配
分组的话即需要使用Pattern类
例子:
Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
Matcher m = p.matcher("010-12345678");
if (m.matches()) {
String g1 = m.group(1);
String g2 = m.group(2);
System.out.println(g1);
System.out.println(g2);
}
得到两个匹配上的子串010和12345678。
贪婪匹配
一般默认是贪婪匹配,就是一个表达式尽可能多的匹配后面的字符串
“123000”:3个0
“10100”:2个0
“1001”:0个0
如(\d+)(0*)这个的话那么后面的(0*)就没用了,因为前面的\d+就已经把所有的字符串匹配完了,所以分组的时候就只会显示一个组。这个时候可以在\d+变为\d+?变为非贪婪,这样遇到0的时候发现后面的0可以匹配\d+就不会再往后匹配了。
tips:(\d??)(9)前项表示匹配1个或0个数字后面表示非贪婪,如果是’9999‘的话,就可以分为两组 ”“和”9999“
前面就默认为只匹配0个字符。
分割字符串:String.split()
搜索子串:Matcher.find()
替换字符串:String.replaceAll()
分割字符串
String.split()方法传入的正是正则表达式。
“a, b ;; c”.split(“[\,\;\s]+”); // { “a”, “b”, “c” }
凡是遇到,;空格都是分割符
搜索字符串
例子:
String s = "the quick brown fox jumps over the lazy dog.";
Pattern p = Pattern.compile("\\wo\\w");
Matcher m = p.matcher(s);
while (m.find()) {
String sub = s.substring(m.start(), m.end());
System.out.println(sub);
}
找出符合\w0\w的字符串那么只有
brown的row ,fox, dog
\w等于[A-Za-z0-9_] 注意最后一个是下划线
替换
例子:
String s = "The quick\t\t brown fox jumps over the lazy dog.";
String r = s.replaceAll("\\s+", " ");
System.out.println(r); // "The quick brown fox jumps over the lazy dog."
用一个空格字符串替换调 \s+(这个是代表有一个或多个空格字符或者tab)
反向引用
例子:
String s = "the quick brown fox jumps over the lazy dog.";
String r = s.replaceAll("\\s([a-z]{4})\\s", " <b>$1</b> ");
System.out.println(r);
$1代表是被匹配到的字符串
the quick brown fox jumps over the lazy dog.