java之正则表达式

在其他的语言中(如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.参考:

JAVA 正则表达式 (超详细)

Java 正则表达式

Java正则表达式--Matcher.group函数的用法

正则表达式之分组 group(java版)

正则表达式全集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值