正则表达式语法与使用

正则表达式(Regular Expressiqn)

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
则表达式通常被用来检索、替换那些符合某个模式的文本

java.util.regex包中提供以下两个类对正则表达式的支持:
Matcher类
通过解释Pattern对character sequence执行匹配操作的引擎。
Pattern类
正则表达式的编译表示形式。

public final class Pattern extends Objectimplements Serializable
正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。
典型的调用顺序是

Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaab");
boolean b = m.matches();

public final class Matcher extends Object implements MatchResult
Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定义完的正则,再使用
Matcher类进行验证或者替换。

常用方法:
boolean matches()
尝试将整个区域与模式匹配。

String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每个子序列。

String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列

在JDK1.4之后加入了正则,随后又更新了String的操作类,因为在使用正则中,所有的内容通过字符串表示的比较多。在String类中有以下的方法可以完成对正则的支持:
boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。

String replaceAll(String regex, String replacement)
使用给定的replacement替换此字符串
所有匹配给定的正则表达式的子字符串。

String replaceFirst(String regex, String replacement)
使用给定的replacement替换此字符串
匹配给定的正则表达式的第一个子字符串。

String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。

常用的正则字符:

预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾

代码示例:
1、验证电话号码(如: 010-38389438 )
2、验证手机号码
3、验证用户名,只能是字母开头的数字、字母或下划线的组合
4、验证IP地址(如: 192.168.1.1)
5、验证年龄(100以内)
6、验证金额(可以有小数位)

package com.booy;

public class RegexDemo {
    public static void main(String[] args) {
        //验证电话号码
        String phoneNumber = "662-6589905";
        boolean p = phoneNumber.matches("\\d{3,4}-\\d{7,8}");
        System.out.println(p);
        //验证手机号码
        String phone = "17602800280";
        boolean p1 = phone.matches("1[3-9]\\d{9}");
        System.out.println(p1);
        //验证用户名,只能是字母开头的数字、字母或下划线的组合,最少6位,最多15位
        String user = "e88_ddf";
        boolean p2 = user.matches("[a-zA-Z]\\w{5,14}");
        System.out.println(p2);
        //验证IP地址(如: 192.168.1.1)
        String ip = "192.168.1.1";
        boolean p3 = ip.matches("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}");
        System.out.println(p3);
        //验证年龄
        String age = "35";
        boolean p4 = age.matches("\\d{1,3}");
        System.out.println(p4);
        //验证金额(可以有小数位)
        String m = "35.88";
        boolean p5 = m.matches("\\d+.\\d+");
        System.out.println(p5);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章