正则表达式(一)

Regular Expressions

Posted by Elliot on April 3, 2015

版权声明:本文为博主原创文章,未经博主允许不得转载

以前经常要用到正则表达式,比如判断手机号码,邮箱格式等等,只知道在网上copy代码,不知其所以然,所以学习了一下正则表达式,今天来讲讲。。。

1、什么是正则表达式

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

2、正则表达式的语法

看一个过滤纯数字的demo:

- (BOOL) validataNumber:(NSString *)string{

    NSString * number=@"^[0-9]+$";
    NSPredicate * numberPre =[NSPredicate predicateWithFormat:@" SELF MATCHES %@ ",number];

    return [numberPre evaluateWithObject:string];
}

其中一个语句就是正则表达式:@"^[0-9]+$" 它代表了字符串中只能包含>=1个0-9的数字,语法是不是有一些怪异?哈哈 下面我们来介绍正则表达式的语法(iOS中对转义字符的处理有一些不同,语法基本相同)

语法:

特殊字符 '^''$' 他们的作用是分别指出一个字符串的开始和结束

  • "^one":表示所有以"one" 开始的字符串 (比如: “one cat” ,”one something” eg); 类似于- (BOOL) hasPrefix:(NSString *)aString;前缀匹配

  • "two$":表示所有以"two" 结尾的字符串 (比如:"something two" eg); 类似于- (BOOL) hasSuffix:(NSString *)aString; 后缀匹配

  • "^person$":`表示开始和结尾都是 "person"的字符串,这个是唯一的~;

  • "person":表示任何包含"person" 的字符串。 类似于- (BOOL) containString:(NSString *)aString; 搜索子串用的。

"*""+""?" 这三个符号,表示一个或者N个字符重复出现的次数。他们分别表示“没有或者更多”,“一次或者更多”,“没有或者一次”。 比如:

  • "ab*"表示这个字符串有一个a后面跟着零个或者多个b(”a” “ab” “abb” “abbb” eg)
  • "ab+"表示这个字符串有一个a后面跟着一个或者多个b (”ab” “abb” “abbb” eg)
  • "ab?"表示这个字符串有一个a后面跟着一个b或者没有b (”a” “ab” 两种)
  • "a?b+$"表示这个字符串的末尾有一个或者零个a跟着一个或者更多b(”…b” “…ab” “…bb” “…abb” eg)

可以用大括号括起来 {} ,表示一个或者重复的具体范围。 例如:

  • "ab{4}" 表示这个字符串有一个a跟着4个b(”abbbb”)
  • "ab{3,4}"表示这个字符串有一个a跟着3个或者4个b(”abbb” “abbbb”)
  • "a{1,}"表示这个字符串有一个a跟着多个b,效果跟”ab+” 一样(”ab” “abb” “abbb” eg) 所以上面的三个特殊符号可以分别用"{0,}" "{1,}" "{0,1}" 表示 (注:没有上限是不允许的,比如:”{,5}” 是错误的语法)

"|"表示”或”语法

  • 比如"(a|bcd)ef"表示这个字符串是"aef"或者"bcdef"

方括号"[]" 表示在括号内的众多字符中,选择1-N个括号内的符号语法作为结果,例如:

  • "[ab]" 表示a或者b相当于 "a|b"
  • "[a-d]" 表示"a|b|c|d"或者"[abcd]",
  • "^[a-zA-Z]" 表示一个以字母开头的字符串
  • "[0-9]a" 表示一个字符串有一个数字加一个a
  • "[a-zA-Z0-9]$" 表示一个字符串以字母或者数字结尾

"." 匹配出"/r/n"之外的任何单个字符串,例如:

  • "^.{5}$" 表示这个字符串长度为5

"\num" 其中num是一个正整数。表示"\num"之前的字符出现相同的个数,例如:

  • "(.)\2"表示两个相同的字符
  • "10\{1,2\]" 表示数字1后面跟着1个或者2个0(”10” “100”)
  • "0{3,\}" 表示只是3个0(”000” “0000” eg)

在方括号中用 “^” 表示不希望出现的字符 其中 “^” 应该出现在方括号的第一位; 比如

  • "@[^a-zA-Z]@" 表示字符串在”@@”之间不希望出现字母

常用的一些还有:

  • "\d" 匹配一个数字字符,等价于[0-9]
  • "\D" 匹配一个非数字字符,等价于[^0-9]
  • "\w" 匹配包括下划线在内的任何单词字符,等价于”[a-zA-Z0-9_]”
  • "\W" 匹配任何非单词字符,等价与”[^a-zA-Z0-9_]”

在iOS中如果遇到转义字符的话,要多加一个"\" 例如:

  • 全数字字符:@"^\\d+$"

OK !正则表达式就介绍到这里吧,下篇讲一些常用的正则表达式。