首页 > 编程笔记 > Java笔记 阅读:2

Java中的正则表达式(附带实例)

正则表达式通过指定一个字符串匹配机制来匹配符合条件的字符串。

假设程序需要在接收客户端传来的手机号码后,判断这个手机号码字符串是否是一个有效的手机号码格式,就需要设定一个匹配机制。例如,这个字符串的长度必须是 11 位且第二位字符不能是 2,若匹配国际手机号码,可能还需要匹配国家代码。

正则表达式提供了精确的规则描述语法,用以判定合法的匹配。String.matches() 这个方法主要用于返回是否匹配指定的字符串,如果匹配则为 true,反之为 false。这个方法的参数需要传递一条正则表达式。

正则表达式在程序中的应用非常广泛,例如:

正则表达式的语法

在正则表达式中,除去一些具有特殊意义的保留字符外,其他字符都表示字符本身:
. * + ? { | ( [ \ ^ $
常用保留字符的意义,如下表所示:

表:常用保留字符的意义
保留字符 意义
. 匹配任意单个字符
* 表示前面的表达式可以出现 0 次或多次
+ 表示前面的表达式可以出现 1 次或多次
? 表示前面的表达式可以出现 0 次或 1 次
{n} 用于指定匹配次数的保留字符
| 表示或者,即两项规则中满足任意一项
() 表示匹配括号中的全部字符
[] 表示匹配括号中的任意一个字符,用于范围描述
\ 转义字符,对保留字符的匹配都需要转义
^ 表示匹配字符串的开始位置。若在保留字符[]内,出现在开头位置,则将取反字符集的匹配
$ 表示匹配字符串的结束位置
\d 与 \D 匹配数字
\w 与 \W 匹配字符,[a-zA-Z0-9_]
\s 与 \S 匹配空白字符

【实例 1】匹配 6 位数字:

\d{6}


【实例 2】匹配至少 6 位字符:

\w{6,}


【实例 3】匹配以 0 开头的任意长度数字:

0[0-9]*


【实例 4】匹配由 26 个英文字母组成的字符串,不区分大写与小写:

[A-Za-z]+

Java正则表达式的使用

除 String 类的 matches() 方法外,正则表达式通常结合使用 Pattern 类或 Matcher 类来实现一个完整的逻辑。

1) Pattern类

java.util.regex.Pattern 类私有化了构造方法,这意味着创建一个 pattern 对象只能调用其公有的静态方法,如 matches()、compile() 等。

【实例】以手机号码校验为例,为了校验用户输入的手机号码格式是否正确:“第一位数字为1且第二位数字不能为2,长度为11”。使用 Pattern 类以完善校验逻辑,代码如下:
import java.util.regex.Pattern;

public class RegxDemo {
    public static void main(String[] args) {
        String phone = "130****3876";        // 用户定义的手机号码
        String regex = "1[3-9]\\d{9}";       // 正则表达式的规则
        boolean matches = Pattern.matches(regex, phone);
        System.out.println(matches);
    }
}
程序运行结果为:

true

在上述代码中,matches() 的第一个参数为正则表达式,第二个参数为要校验的手机号码字符串,返回一个 boolean 类型的结果,true 表示匹配成功,反之表示匹配失败。对于其他的正则表达式使用方法,可以查阅 Java API 在线文档。

2) Matcher类

java.util.regex.Matcher 类提供了字符串的索引、查找及替换功能。Matcher 类与 Pattern 类一样,也没有公有构造方法,需要调用 Pattern 对象的 matcher() 方法来获得一个 Matcher 对象。

【实例】想要判断内容是否为正负数,它的正则表达式为 [+-]?\\d+,使用 matches() 完成逻辑校验,代码如下:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegxDemo {
    public static void main(String[] args) {
        String regex = "[+-]?\\d+";                   // 正则表达式
        Matcher matcher = Pattern.compile(regex)
                                   .matcher("-35");    // 得到Matcher对象
        boolean result = matcher.matches();            // 得到匹配结果
        System.out.println(result);
    }
}
程序运行结果为:

true

在上述代码中,matches() 返回一个与正则表达式规则匹配的 boolean 结果。如果需要了解其他的常用方法,可以查阅 Java API 在线文档。

相关文章