1.1 基本正则表达式
1.1.1 正则表达式简介
· 实际开发中,经常需要对字符串数据进行一些复杂的匹配、查找、替换等操作。通过"正则表达式",可以方便的实现字符串的复杂操作。
· 正则表达式是一串特定字符,组成一个"规则字符串",这个"规则字符串"是描述文本规则的工具。正则表达式就是记录文本规则的代码。
· 例如:
- 正则表达式:"[a-z]"表示a到z的任意一个字符
- 正则表达式:"[a-z]"表示由1个或多个a-z字符组成的字符串。
正则表达式简介(续1)
字符集合
正则表达式 | 说明 |
[abc] | a、b、c中任意一个字符 |
[^abc] | 除了a、b、c的任意字符 |
[a-z] | a、b、c、......、z中的任意一个字符 |
[a-zA-Z0~9] | a~z、A~Z、0~9中任意一个字符 |
[a-z&&[^bc]] | a~z中除了b和c以外的任意一个字符,其中&&表示"与"的关系 |
正则表达式简介(续2)
预定义字符集
正则表达式 | 说明 |
. | 任意一个字符 |
\d | 任意一个数字字符,相当于[0-9] |
\w | 单词字符,相当于[a-zA-Z0-9_] |
\s | 空白字符,相当于[\t\n\x0B\f\r] |
\D | 非数字字符 |
\W | 非单词字符 |
\S | 非空白字符 |
正则表达式简介(续3)
数量词
正则表达式 | 说明 |
X? | 表示0个或1个X |
X* | 表示0个或任意多个X |
X+ | 表示1个到任意多个X(大于等于1个X) |
X{n} | 表示n个X |
X{n, } | 表示n个到任意多个X(大于等于n个X) |
X{n,m} | 表示n个到m个X |
正则表达式简介(续4)
· 检索邮政编码:
- 规则为6位数字
- 第一种匹配规则 [0-9][0-9][0-9][0-9][0-9]
- 简化第一种规则 \d\d\d\d\d
- 简化第二种规则 \d{6}
1.1.2 分组"()"
· 分组:()圆括号表示分组,可以将一系列正则表达式看做一个整体,分组时可以使用"|"表示"或"关系,例如:匹配手机号码前面的区号:
(\+86|0086)?\s?\d{11}
上述例子中,圆括号表示这里需要出现" +86"或者"0086"
分组"()"(续1)
· 检索手机号码:+8613838389438
- +86 可有可无
- +86与后面的号码直接空格可以没有或者有多个
- 电话号码为11位数字
1.1.3 "^"和"$"
· 边界匹配
- ^代表字符串开始
- $代表字符串结束
· 例如:匹配用户名规则-从头到尾连续8~10个单词字符
\w{8,10}
^\w{8,10}$
· 如果使用第一种写法,则"abcd1234_abcd"是可以验证通过的;
· 使用第二种写法由于有从头到尾整体的限定,则验证不能通过。
1.2 String正则API
1.2.1 matches方法
· matches(正则表达式)方法:将一个字符串与正则表达式进行匹配
· 如果匹配成功就返回true,否则返回false
/** 测试email是否合法 */
public void email(){
String emailRegEx="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$";
String email="[email protected]";
System.out.println(email.matches(emailRegEx));
}
1.2.2 split方法
· String的split方法可以将字符串按照特定的分隔符拆分成字符串数组
String[] split(String regex) | 参数regex为正则表达式,以regex所表示的字符串为分隔符,将字符串拆分成字符串数组。 |
数据:"3,itkzhan, 3, [email protected],33"
拆分为:["3"," itkzhan"," 3"," [email protected],"," 33"]
拆分方式:str.split(",\\s*");
解释:以逗号开头,>=0个的空格组合为分割
split方法(续1)
/** 使用split方法拆分字符串 */
public void testSplit(){
//按空格拆分
String str="java cpp php c# objective-c";
String[] strArr=str.split("\\s");
System.out.println(Arrays.toString(strArr));
//按+、-、=符号拆分
String line="100+200-150=150";
strArr=line.split("[\\+\\-=]";
System.out.println(Arrays.toString(strArr));
}
1.2.3 replaceAll方法
· String提供了用于字符串替换的方法:
String replaceAll(String regex,String replacement) | 将字符串匹配正则表达式regex的字符串替换成replacement。 |
replaceAll方法(续1)
/** 使用replaceAll方法实现字符串替换 */
@Test
public void testReplaceAll(){
//将str中的所有数字替换为"数字"二字
String str="abc123bcd45ef6f7890";
str=str.replaceAll("\\d+","数字");
System.out.println(str);
}