正则表达式:实现字符串的复杂操作:
正则表达式是一串特定字符,组成一个“规则字符串”,这个“规则字符串”是描述文本规则的工具。正则表达式就是记录文本规则的代码,例如:
[a-z]:表示a到z的任意一个字符
[a-z]+:表示由一个或多个a到z的字符组成的字符串
[^abc]:表示除了a,b,c的任意字符
[abc]:表示a,b,c中任意一个字符
[a-zA-Z0-9]:表示a-z A-Z 0-9中的任意一个字符
[a-z&&[^bc]]:表示a-z中除了bc以外的任意一个字符
" . ":表示任意一个字符
“ \d ":表示任意一个数字字符
“ \w ":表示单词字符,相当于[a-zA-Z0-9]
“ \s":表示空白字符 ,相当于[\t\n\x0B\f\r]
“ \D":表示非数字字符
“ \W ":表示非单词字符
“ \S":表示非空白字符
”X?“:表示0个或1个X
”X+“:表示1个到任意多个X
”X*“:表示0个或任意多个X
”X{n}“:表示n个X
”X{n, }“:表示n个到任意多个X
”X{n,m}“:表示n个到m个X
分组”()“
分组:()圆括号表示分组,可以将一系列正则表达式看作一个整体,分组时可以使用”|“表示”或“关系
例如:匹配手机号前面的区间:
(\+86|0086)?\s?\d{11}
圆括号表示这里需要出现”+86“或则”0086“
边界匹配:
^表示字符串开始
$表示字符串结束
例如:匹配用户名从头到尾8-10个单词字符
\w{8,10}
^\w{8,10}$
第一种写法,则”abcd1234_abcd"是可以通过验证的
第二种由于有从头到尾整体的限定,验证不能通过
String提供了支持正则表达式的方法1
boolean matches(String regex)
使用给定的正则表达式验证当前字符串是否满足格式要求 ,需要注意,给定的正则表达式无论是否添加边界符(^$)都是做全匹配验证
例如:
String mail = "youjb@qq.com";
邮箱的正则表达式格式:[a-z0-9A-Z_]+@[a-z0-9A-Z_]+[\.[a-zA-Z]+]+
正则表达式只是用来验证格式是否正确
验证的时候只要遇见一个’\‘就加一个’\‘
boolean flag = mail.matches("[a-z0-9A-Z_]+@[a-z0-9A-Z_]+[\\.[a-zA-Z]+]+");
boolean flag1 = mail.matches("[\\w]+@[\\w]+[\\.[a-zA-Z]+]+");
Java支持正则表达式方法2
String[] split(String regex)
将当前字符串按照满足正则表达式的部分拆分,将拆分出来的内容存入字符串数组并返回
例如:String str = "abd123def456gh";
String[] data = str.split("[0-9]+");
按照数字部分进行拆分,获得所有字母部分 ,若连续匹配了拆分部分,那么中间会拆分出一个空字符串,若是在字符串末尾连续匹配 , 那么所有末尾拆分出来的空字符串全部忽略(注意:匹配“ . ”需要写成“ \\. ”)
字符串支持正则表达式方法3
String replaceAll(String regex,String str )
将当前字符串中满足正则表达式的部分替换为给定内容
例如:String str = "abc123def456gh";
/*
* 将当前字符串中的数字部分替换为"#NUMBER#"
* abc#NUMBERdef#NUMBER#gh
*/
String str1 = str.replaceAll("\\d+", "#NUMBER#");
//String str1 = str.replaceAll("[0-9]+","#NUMBER#");