正则表达式语法

下面先来介绍一下正则表达式的基本语法。

正则表达式基本语法

正则表达式常见字符

    test            # 匹配包含test的字符串
    .               # 匹配除换行符外任意字符
    \               # 转义字符
    [abc]或[a-c]    # 匹配字符类,如例子匹配a,b,c中的任何一个
    [^abc]          # 匹配除了a,b,c以外的所有字符

正则表达式特殊字符

\d                  # 数字,等同于[0-9]
\D                  # 非数字
\s                  # 空白字符(包括换行、Tab等)
\S                  # 非空白字符
\w                  # 单词,等用于[a-zA-Z0-9_]
\W                  # 非单词

正则表达式数量词
c*                  # 匹配字符"c" 0或无限次
c+                  # 匹配字符"c" 1次以上
c?                  # 匹配字符"c" 0或1次
c{3}                # 匹配字符"c" 3次
c{3,5}              # 匹配字符"c" 3到5次

正则表达式边界匹配
^abc                # 匹配"abc"开头的字符串
abc$                # 匹配"abc"结尾的字符串

正则表达式逻辑或分组
c|b                 # 匹配"c"或"b"
(ab|cd)             # 匹配"ab"或"cd"
(?Pabc)       # 匹配"abc"并命名为name
(?P=name)           # 前文中的name组

实例分析 匹配用户手机号
根据上面的语法,我用OC语言写出来的正则表达式匹配手机号的代码如下:

NSString *pattern = @"^1+[34578]+\\d{9}";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
BOOL isMatch = [pred evaluateWithObject:telNumber];
return isMatch; 

我们来分析我写的这段正则表达式,首先是边界匹配^1手机号一定是1开头,所以我们的开头用边界匹配1。

[3578] 我们用中括号[]来匹配字符类,说明第二位数字是3、5、7、8中任意一个就可以,目前17也是新开号段,所以得考虑进去匹配上。

最后\d{9}这里要拆分开看,首先\d表示数字,等同于[0-9],而{9}表示匹配数字\d 9次。这样,就完成了一个11位手机号码的校验。

+ : 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

重复
表2.常用的限定符

代码/语法 说明

  • 重复零次或更多次
  • 重复一次或更多次
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次

参考链接:https://www.jianshu.com/p/a3dd72eadfa3

进阶:https://juejin.im/post/5965943ff265da6c30653879

你可能感兴趣的:(正则表达式语法)