在其他的语言中(如C),用一个反斜杠 \ 就可以表示转义,而在Java语言,正则表达式中要用两个反斜杠才能表示转义。
Java语言中,表示一位数字的正则表达式是 \\d,表示一个普通的反斜杠是 \\\\。
1.以座机号码的正则表达式来分析如下:
private void testForRegExp() {
String[] s = {"120", "10086", "+86-010-5566789","+86-05740-5566789",
"(021)8877654", "(0574)8877654", "021-8877654", "0574-8877654",
"0218877654", "05748877654", "4006999999", "400-6999999", "400-699-9999"};
String regExp = "^(\\+\\d{2,4}-)?\\(?\\d{3,5}\\)?-?((\\d{7,8})|(\\d{3}-?\\d{4}))?$";
for (int i = 0; i < s.length; i++){
Matcher m = Pattern.compile(regExp).matcher(s[i]);
Log.d("lym123", s[i] + " : " + m.matches());
}
}
对正则表达式"^(\\+\\d{2,4}-)?\\(?\\d{3,5}\\)?-?((\\d{7,8})|(\\d{3}-?\\d{4}))?$"来说,
^:匹配输入字符串开始的位置
$:匹配输入字符串结尾的位置
匹配国家代码,比如"+86-"[中国],"+852-"[香港],"+1808-"[夏威夷]:(\\+\\d{2,4}-)?
\\+是加号+的转义。
\\d表示数字。
\\d{2}代表匹配任意两个数字。
\\d{2,4}代表匹配任意2个到4个数字,即12,345,6789都会匹配上。{m, n}为一个范围,m 和 n 是非负整数,且m<=n。
-是分隔符。
?代表匹配前面的子表达式零次或者一次,或指明一个非贪婪限定符。若要匹配?字符本身,请使用\\?
(\\d{2,4}-)? 代表匹配前2/3/4个数字,允许匹配不上。
匹配各省区号,比如(021),010-,0531-,400-等;也可匹配10086,95533等号码:\\(?\\d{3,5}\\)?-?
故d{3,5},即可以匹配3到5个数字
匹配真正的号码,若为10086,则该表达式就不是必须的,所有在整个子表达式后加了?:((\\d{7,8})|(\\d{3}-?\\d{4}))?
真正的号码可能为7位或8位。若把全国号码如"400-6999999"中的"6999999"写成"699-9999",则就是(\\d{3}-?\\d{4})
ps:
1). 密码:6-20位,大小写字母,数字,特殊字符三种或三种以上
String regEx = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])[a-zA-Z0-9]{6,20}$";
2). 不含有特殊字符
String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?\\s\\ ]|[\\u4E00-\\u9FA5]";
2.按指定模式查找某个字符串
public void testForRegularExpression() {
// 按指定模式在字符串查找
String line = "http://bindinguser/HR13C000096-viewsss";
String pattern = "http://bindinguser/(\\S*)-viewsss";
// 现在创建 matcher 对象
Matcher m = Pattern.compile(pattern).matcher(line);
if (m.find()) {
Log.d("lym123", m.group(0) + "," + m.group(1));
}
}
其中group(0)代表整个表达式,group(1)代表需要的字符串。
3.通配符:句点"."
“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符。
4.方括号[]
只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符
5.或|
如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组
6. 否 ^
如果用在方括号内,“^”表示不想要匹配的字符:[^a],表示不匹配a
7 匹配次数
符号 | 次数 |
---|---|
* | 0次或多次 |
+ | 1次或多次 |
? | 0次或1次 |
{n} | 恰好n次 |
{m, n} | 从m次到n次 |
8.常用符号
符号 | 等价正则表达式 |
---|---|
\\d | [0-9] |
\\D | [^0-9] |
\\w | 匹配任何字类字符,包括下划线。 与"[A-Za-z0-9_]"等效。 |
\\W | 与任何非单词字符匹配。 与"[^A-Za-z0-9_]"等效。 |
\\s | 匹配任何空白字符,包括空格、制表符、换页符等。 与 [ \f\n\r\t\v] 等效。 |
\\S | 匹配任何非空白字符。 与 [^ \f\n\r\t\v] 等效 |
如"999-99-9999"的正则表达式为:"[0-9]{3}-[0-9]{2}-[0-9]{4}"或"\\d{3}-\\d{2}-\\d{4}"。
9.参考: