让正则表达式简单一些

定义

  正则表达式(Regular Expression),即预先设置一条字符串描述一个特征,然后用它去验证另一个字符串是否匹配这个特征。例如,验证用户输入的邮件地址是否合法;验证手机号码是否合法等等。
正则表达式由两种字符组成:“元字符”和“普通字符”。其中,前者在正则表达式中有特殊的意义。它可以是一个字符,也可以是一个字符序列。后者则是普通的文本字符。

语法(简单)

正则表达式中比较重要的三个地方:括号(B)、插入符号(C)以及美元符号(D)。

  • 括号(Bracket)
符号 备注
大括号{} 指定匹配字符的数量
中括号[] 需要匹配的字符,且只匹配一个字符
小括号() 匹配字符串任何位置中按相同顺序排列的字符;分组
  • 插入符号(Caret)
    插入符号“^”,表示正则表达式的开始。与字符串开始的地方匹配,不匹配任何字符。

  • 美元符号(Dollar)
    美元符号“$”,表示正则表达式的结束。与字符串结束的地方匹配,不匹配任何字符。

举例如下:

  1. ^[0-9]$
    描述:匹配0-9之间的任何一个数字,而且仅匹配一个数字。

  2. ^g[o]{2,3}gle$
    描述:匹配以字符“g”开头,以字符序列“le”结尾,中间匹配字符“o”,它可以出现2-3次。即只有字符序列“google”和“gooogle”会被匹配到。

语法(详细)

  • 字符组“[]”

字符组是一组中括号,即[]。它可以匹配[]中包含的任意一个且只匹配一个字符。
在字符组中可以用连字符“-”来表示范围,可以用插入符号“^”表示排除型字符组。在字符组之外,“-”和“^”都只是普通的字符。

表达式 备注
[0-9] 表示任意一个数字,且只表示一个数字。
[a-z] 表示任意一个小写字母
[A-Z] 表示任意一个大写字母
[\u4e00-\u9fa5] 表示任意一个汉字

注意:如果将字符组表达式[0-9]改为[^0-9],则表示的意思刚好相反。它表示任意一个非数字字符。

下面是常见字符组表达式的缩写:

表达式 备注
\d 相当于[0-9],即表示0~9中的任意一个数字
\D 任意一个非数字字符,相当于[^0-9]
\w 任意一个字母(数字或下划线),相当于[a-zA-Z0-9_]
\W \w取反,相当于[^a-zA-Z0-9_]
\s 任意空白字符,相当于[\r\n\f\t\v]
\S 任意非空白字符,相当于[^\r\n\f\t\v]

注意:“\r”表示回车,“\n”表示换行,“\f”表示换页,“\t”表示水平制表符,“\v”表示垂直制表符。

  • 量词

量词表示一个子表达式可以被匹配的次数,子表达式可以是一个字符、字符组或者用小括号括起来的表达式。

表达式 说明 举例
{m} 表达式匹配m次 g[o]{2}gle表示google
{m,n} 表达式最少匹配m次,最多n次 g[o]{2,3}gle匹配google和gooogle
{m,} 表达式最少匹配m次 [1-9]{3,}表示至少匹配三位数
? 表达式匹配0或1次,相当于{0,1} g[o]?gle匹配ggle和gogle
* 表达式匹配0或任意多次,相当于{0,} g[o]*gle匹配可参考“google搜索”
+ 表达式匹配1或任意多次,相当于{1,}

经典使用案例

  1. 用户名或密码
    描述:^[a-zA-Z0-9_-]{3,16}$ 或者 ^[\w-]{3,16}$
  2. 邮箱Email
    描述:^[a-zA-Z0-9-]+@[a-zA-Z0-9-]+(.[a-zA-Z0-9_-]+)+$
    或者 ^[\w-]+@[\w-]+(.[\w-]+)+$
  3. 匹配空白字符
    描述:^\n\s\r$ 或者 ^[\s]$
  4. 匹配网址url
    描述:^[a-zA-z]+://[^\s]*$
  5. 匹配日期(简单)
    描述:\d{4}-\d{2}-\d{2} 参考资料中由更加详细的日期匹配链接

参考资料

  1. 揭开正则表达式的神秘面纱
  2. 正则表达式速查表
  3. 正则表达式学习参考
  4. 轻松学习正则表达式【译】
  5. 正则应用之——日期正则表达式
坚持原创技术分享,您的支持将鼓励我继续创作!