美文网首页
正则表达式语法

正则表达式语法

作者: 超_iOS | 来源:发表于2018-05-28 17:20 被阅读25次

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

    正则表达式基本语法

    正则表达式常见字符
    
        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"
    (?P<name>abc)       # 匹配"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

    相关文章

      网友评论

          本文标题:正则表达式语法

          本文链接:https://www.haomeiwen.com/subject/igwgjftx.html