码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2017-06-27 18:53:29      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:单词   并集   表达式   return   lis   nat   string   常用   规则   

正则表达式:常用来对字符串进行校验!

比如校验一个QQ号

/**
 * 对QQ号进行校验
 * 要求:长度5~15位,只能是数字,不能以0开头
 */
public static void checkQQ(String qq) {
    int length = qq.length();
    if (length >= 5 && length <= 15) {
        if (!qq.startsWith("0")) {
            try {
                long l = Long.parseLong(qq);
                System.out.println(qq + " : 合法");
            } catch (NumberFormatException exp) {
                System.out.println(qq + " : 含有非法字符");
            }

        } else {
            System.out.println(qq + " : 不能以0开头");
        }

    } else {
        System.out.println(qq + " : 长度不合法");
    }
}

可以实现,但是略显麻烦。
String类中有一个方法:

public boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
调用此方法的str.matches(regex)形式与以下表达式产生的结果完全相同:
Pattern.matches( regex , str )

像上面对QQ号的校验,使用下面的就可以简单的检验了。

String qq = "123456789";
String regex = "[1-9][0-9]{4,14}";
qq.matches(regex);

常见的正则表达式构造摘要

\t    制表符(The tab character)
\n    新行(换行)符(The newline (line feed) character)
\r    回车符(The carriage-return character)
[abc]    a、b 或c(a,b,or c)
[^abc]    任何字符,除了a、b或c(Any character except a, b, or c)
[a-zA-Z]    a到z或A到Z,两头的字母包括在内(a through z or A through Z, inclusive (range))
[a-d[m-p]]    a到d或m到p:[a-dm-p](并集)(a through d, or m through p: [a-dm-p] (union))
[a-z&&[def]]    d、e 或 f(交集)(d, e, or f)
[a-z&&[^bc]]    a到z,除了b和c:[ad-z](减去)(a through z, except for b and c: [ad-z])
[a-z&&[^m-p]]    a到z,而非m到p:[a-lq-z](减去)(a through z, and not m through p: [a-lq-z])
.    任何字符(Any character)
\d    数字:[0-9](A digit: [0-9])
\D    非数字:[^0-9](A non-digit: [^0-9])
\s    空白字符:[\t\n\x0B\f\r](A whitespace character: [ \t\n\x0B\f\r])
\S    非空白字符:[^\s](A non-whitespace character: [^\s])
\w    单词字符:[a-zA-Z_0-9](A word character: [a-zA-Z_0-9])
\W    非单词字符:[^\w](A non-word character: [^\w])
^    行的开头(The beginning of a line)
$    行的结尾(The end of a line)
\b    单词边界(A word boundary)
\B    非单词边界(A non-word boundary)
\A    输入的开头(The beginning of the input)
\G    上一个匹配的结尾(The end of the previous match)
\Z    输入的结尾,仅用于最后的结束符(如果有的话)(The end of the input but for the final terminator, if any)
\z    输入的结尾(The end of the input)
X?    X,一次或一次也没有(X, once or not at all)
X*    X,零次或多次(X, zero or more times)
X+    X,一次或多次(X, one or more times)
X{n}    X,恰好 n 次(X, exactly n times)
X{n,}    X,至少 n 次(X, at least n times)
X{n,m}    X,至少 n 次,但是不超过 m 次(X, at least n but not more than m times)

正则表达式对字符串的常见操作:匹配、切割、替换、获取

1.匹配,其实就是使用String类中的matches()方法

String regex = "[1-9]\\d{4,14}";

2.切割,其实使用的就是String类中的split()方法

String str = "zhangsan          lisi   wangwu";
String regex = " +";
String[] names = str.split(regex);

3.替换,其实使用的就是String类中的replaceAll()方法

String str = "zhangsantttttttttlisimmmmmmwangwu";
str = str.replaceAll("(.)\\1+", "#");

4.获取

//将正则规则进行对象的封装
Pattern p = Pattern.compile("a*b");
//通过正则对象的matches方法与字符串进行关联,获取对字符串操作的匹配器对象Matcher
Matcher m = p.matcher("aaaaab");
//通过匹配器对象对字符串进行操作
boolean b = m.matches();
String str = "da jia hao,ming tian bu fang jia!";
Pattern p = Pattern.compile("\\b[a-z]{3}\\b");//注意单词边界
Matcher m = p.matcher(str);
while (m.find()) {
    System.out.println(m.group());
}

 

正则表达式

标签:单词   并集   表达式   return   lis   nat   string   常用   规则   

原文地址:http://www.cnblogs.com/winner-0715/p/7086327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!