一、常用符号定义
字符类 | |
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] | a到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] | d、e 或 f(交集) |
[a-z&&[^bc]] | a到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] | a到 z,而非 m 到 p:[a-lq-z](减去) |
| |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
POSIX 字符类(仅 US-ASCII) | |
\p{Lower} | 小写字母字符:[a-z] |
\p{Upper} | 大写字母字符:[A-Z] |
\p{ASCII} | 所有 ASCII:[\x00-\x7F] |
\p{Alpha} | 字母字符:[\p{Lower}\p{Upper}] |
\p{Digit} | 十进制数字:[0-9] |
\p{Alnum} | 字母数字字符:[\p{Alpha}\p{Digit}] |
\p{Punct} | 标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ |
\p{Graph} | 可见字符:[\p{Alnum}\p{Punct}] |
\p{Print} | 可打印字符:[\p{Graph}\x20] |
\p{Blank} | 空格或制表符:[ \t] |
\p{Cntrl} | 控制字符:[\x00-\x1F\x7F] |
\p{XDigit} | 十六进制数字:[0-9a-fA-F] |
\p{Space} | 空白字符:[ \t\n\x0B\f\r] |
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
二 正则使用
1、如果只想知道该字符串是否对错 匹配
//匹配手机号
public static void matcherMobilePhone(String phone){
//13XXX 15XXX 18XXX
String regEx ="1[3,5,8]\\d{9}";
System.out.println(phone+":"+phone.matches(regEx));
}
2、如果想要将已有的字符串编程另一个字符串 替换
//将重叠字符替换成单个字符
public static void replaceReduplicationWithSingleWord(String str){
String regex = "(.)\\1+";
System.out.println(str.replaceAll(regex, "$1"));//$在正则表达式中是特殊符号,用来取组
}
3、如果想要按照自定的方式将字符串编程多个字符串 切割
//按照叠词分割
public static void splitByReduplication(String str){
String regex = "(.)\\1+";
String [] arr = str.split(regex);
for(String s:arr){
System.out.println(s);
}
}
4、想要拿到符合需求的字符串字串 获取
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
需求:将字符串中符合规则的字串取出
步骤
1、将正则表达式封装成对象
2、让正则对象和要操作的字符串相关联
3、关联后,获取正则匹配引擎
4、通过引擎对符合规则的字串进行操作,比如取出
*/
public class GetTest {
public static void main(String[] args) {
String str = "ming tian jiu yao fang jia le , wo men hen gao xing";
String regex = "\\b[a-zA-Z]{3}\\b";//取出字符串中3个连续字符的拼音
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.start()+"..."+m.end());
System.out.println(m.group()); //提取组中内容
}
}
}
正则表达式能够将复杂的字符处理简单化,但要完全掌握平时需要多练习。