Java正则表达式

354 阅读2分钟

一、正则表达式简介

正则表达式,又称规则表达式 (英语:Regular Expression,在代码中常简写为 regexregexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

二、String 类中的 matches() 方法

String.matches()  这个方法主要是返回是否匹配指定的字符串,如果匹配则为 true,反之为 false。

示例代码:

/**
  * 判断字符创是否是一个有效的日期
  * @param theStr
  * @return true 是,false否
  */
public static boolean isDate(String theStr) {
    return theStr.matches("\d{4}\-\d{1,2}\-\d{1,2}");
}

这个方法的参数为正则表达式,关于正则表达式的用法如下:

  • 检查一个字符串中是否含有符合某个规则的子串,并且可以得到这个子串;
  • 根据匹配规则对字符串进行灵活的替换 / 检索操作。

三、正则表达式规则

1、普通字符

字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是 "普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

2、简单的转义字符

一些不便书写的字符,采用在前面加 "" 的方法。这些字符其实我们都已经熟知了。

还有其他一些在后边章节中有特殊用处的标点符号,在前面加 "" 后,就代表该符号本身。比如:^,都有特殊意义,如果要想匹配字符串中""" 都有特殊意义,如果要想匹配字符串中 "^" 和 "" 字符,则表达式就需要写成 "^" 和 "$"。

3、能够与 '多种字符' 匹配的表达式

正则表达式中的一些表示方法,可以匹配 '多种字符' 其中的任意一个字符。比如,表达式 "\d" 可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个。这就好比玩扑克牌时候,大小王可以代替任意一张牌,但是只能代替一张牌。

4、自定义能够匹配 '多种字符' 的表达式

使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。

5、修饰匹配次数的特殊符号

前面讲到的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书写表达式就可以重复匹配。

6、代表抽象意义的特殊符号

一些符号在表达式中代表抽象的特殊意义:

一些符号可以影响表达式内部的子表达式之间的关系:

三、常用正则表达式

1、校验数字的表达式

  • 数字: ^[0-9]*$
  • n位的数字: ^\d{n}$
  • 至少n位的数字 :^\d{n,}$
  • m-n位的数字: ^\d{m,n}$

2、校验字符的表达式

  • 汉字: ^[\u4e00-\u9fa5]{0,}$

  • 长度为3-20的所有字符: ^.{3,20}$

  • 由26个英文字母组成的字符串: ^[A-Za-z]+$

  • 由26个大写英文字母组成的字符串: ^[A-Z]+$

  • 由26个小写英文字母组成的字符串: ^[a-z]+$

  • 由数字和26个英文字母组成的字符串: ^[A-Za-z0-9]+$


3、特殊需求表达式

  • Email地址: ^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
  • 域名: [a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?
  • InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$
  • 手机号码: ^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$