美文网首页
iOS中正则表达式的学习

iOS中正则表达式的学习

作者: kysonyangs | 来源:发表于2015-11-23 16:44 被阅读119次

    最近正好有点空余时间,然后就对正则表达式深入研究了一下。
    首先,什么是正则表达式呢?

    正则表达式,又称郑则表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。它可以迅速地用极简单的方式达到字符串的复杂控制。

    首先看一个正则表达式的例子在iOS中的应用,匹配账号(英文+数字+6-10位),看下面这段代码

    NSString *name = @"a123fds23";
    NSString *regex = @"^[A-Za-z0-9]{6,10}$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if (![pred evaluateWithObject:name])
    {
        NSLog(@"账号错误");
        return YES;
    }
    

    OK,其中@"^[A-Za-z0-9]{6,10}$"就是一个正则表达式,看起来是不是很怪异,现在,来分析一下:
    1、它代表匹配包含a-z、A-Z、0-9这些字母的6-10位的字符串,如果有其他类似'@'、'#'之类的字符,匹配就出错了,后面{6,10}表示6-10位数字或字母
    2、上面字符串中,^,$这两个符号,前面一个代表着开始,后面一个代表结束~举个栗子
    * "^Kellen" 代表以Kellen开始的字符串,eg:"Kellen123"、"Kellen s22"
    * "Kellen$" 代表以Kellen结束的字符串,eg:"111Kellen"、"2sd Kellen"
    * "^Kellen$" 它代表了唯一的一个字符串"Kellen"
    * "Kellen" 它代表了只要包含"Kellen"字符串的就行,eg:"Kellen s22"、"2sd Kellen"、"123 Kellen 1s"
    * [a]表示1-N个括号内符合的字符作为结果,[a]表示包含一个a的字符串,注意,这里没有加重复,所以只是匹配一个,如果加了{},如[a]{2},则表示匹配两个a eg:2aad
    * [ab]表示一个字符串有a或者b
    * [a-z]表示可以匹配a-z中的任一字符,同理A-Z、0-9
    * a{2} 表示匹配两个a eg:2aad
    * ab{2,3} 表示一个字符串中a后面有2个或者3个b
    * ab{1,}表示一个字符串中a后面有1-...个b,eg:"ab"、"abb"、"abbb"...
    * 特殊:*表示{0,} eg:ab* = ab{0,} a后面有0个或者多个b
    * + 表示{1,} eg: ab+ = ab{1,}
    * ? 表示{0,1} eg: ab? = ab{0,1} --> a、ab
    * 注意,{}中可以没有下限,但不能没有上限,即前面一定要写,后面可有可无,你可以这样理解,zb{,5}不可能会有-2个b吧..._
    * "|" 或,a|b 表示一个a或者一个b
    * (a|bsd)e 表示asde或者bsde
    * "."匹配除了"\r","\n"之外的任一字符 eg:.{2}表示两个随机字符
    * "kellen\3" 表示"\3"之前的字符出现的重复次数 "kellennn"
    * 如果放在[]中,比如[a-f]表示该字符不能是a-f中的任一
    * "\d" = [0,9]
    * "\D" = [^0-9]
    * 正则表达式中碰到转移字符,应该加一个''

    现在来说说正则表达式的常用情形:

    • 验证用户名或者密码 : @"^[a-zA-Z0-9]{6-10}$"
    • 手机号码验证 : @"((13[0-9])|(15[4,\d])|(18[0,0-9]))\d{8}$"
    • 字符串仅能是中文: @"^[u4e00-u9fa5]{0,}$"
    • 由数字、26个英文字母或下划线组成的字符串: @"^w+$
      "

    相关文章

      网友评论

          本文标题:iOS中正则表达式的学习

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