正则表达式是一种最早起源于Perl语言的特殊字符串技术,可以通过一些固定的模式编写一些特殊的字符串,通过对这些特殊字符串使用,可以有效的进行表单验证(手机,邮箱,网址等输入格式的检查),以及一些数据的爬取,包括字符替换等功能;因此,正则表达式是一项非常强大的表达式语言。

相关类

java基础架包中java.util.regex提供正则表达式相关的类:

  • Pattern 表示正则表达式编译器对象。Pattern 类没有提供公共的构造方法。 必须调用公共的静态 compile 方法,它将返回一个 Pattern 对象。
  • Matcher 正则表达式的匹配器。 Matcher 没有定义公共的构造方法,需要通过调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

简单的正则表达式例子:

手机号: ^1[3456789]\\d{9}$

解析:

观察以上表达式,被匹配的字符串,必须以数字1开后,后面第二数只能为3,4,5,6,7,8,9中的其中一个,从第三位开始后面一共包含9位数字,并且以数字结尾。

基本规则

正则表达式组成规范

  • “.” :

    用于匹配一个任意的字符

  • “[]”

    为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配。

  • “|”

    如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”, 它表示一个整体

  • “-”

    与表示数字或字母的范围
    如: [0-9]表示0到9中的其中一个字符,[3-8]表示3到8中的一个字符
    [b-d3-8]表示b到z或3到8中其中一个字符 [a-z]表示a到z中的其中一个字符

    [a-c][0-9]{3}可以匹配a234,b112,c223等。这里的大括号“{}”表示能匹配的字符数量

  • “^”

    • 直接使用表示以什么开头,”^1asd”,表示以“1”开头
  • -在[]中使用 即非,用来确定紧靠该符号右边的符号不能出现,

    ​ 如:[^0-9]表示不可以为0到9
    ​ 示例 [^A]表示不可以为A的字符

  • $

匹配次数的通配符

这些符号用来确定紧靠该符号左边的符号出现的次数

示例

1
2
3
4
5
6
7
示例1:a*Hello可以匹配以Hello结尾,以0到多个a开头的字符串,如Hello,aHello,aaHello,aaaHello 
示例2:MyA*Hello可以匹配以My开头,以Hello结尾,中间可以有0到多个A,如MyAAAHello
示例3:HelloE+World可以匹配以Hello开头,以World结尾,中间可以有1到多个E,如HelloEEWorld
示例4:HelloE?World可以匹配以Hello开头,以World结尾,中间必须有0到1个E
示例5:HelloE{3}World可以匹配以Hello开头,以World结尾,中间必须有3个E
示例6:HelloE{2,4}World可以匹配以Hello开头,以World结尾,中间必须有2到4个E
示例7:Helloabc可以匹配以Hello开头,不能以a或b或c结尾

快捷符号

1
2
3
4
\d表示 [0-9] 
\D表示 [^0-9]
\w表示 [A-Za-z0-9_]
\W表示 [^A-Za-z0-9_]