正则表达式每种语言都会接触到,本篇会介绍基本的正则表达式的概念,下篇文章会介绍在iOS开发中应用.
一,正则表达式的理解;
- 首先贴一张常用的正则表达式中常用的元字符表出来:
基础元字符 ^ 匹配开始的位置 $ 匹配结束的位置 . 匹配除换行符(\n、\r)之外的任意字符 \d 匹配一个数字字符,等价于 "[0-9]"; \D 匹配任意非数字字符,等价于 "[^0-9]";
\w 匹配字母、数字、下划线;等价于 "[0-9a-zA-Z_]"; \W 匹配非字母、数字、下划线;等价于 "[^0-9a-zA-Z_]";
修饰型元字符(修饰基础元字符) () 匹配括号内的字符串; | 或表达式;例如 "1|2" 可以匹配 "1" 或者 "2"; [] 字符集合;
[]可以匹配中括号内的任意单个字符;例如 "[123]" ,可以匹配 "1" 或 "2" 或 "3";
[^]匹配未包含中括号内的任意字符;例如 "[^123]",可以匹配任意不是1或2或3的字符;
[a-z]范围匹配,可以匹配 "a" 到 "z"之间的任意字符;
[^a-z]匹配不在 "a" 到 "z" 之间的任意字符;
修饰型元字符(修饰数量) \ 转义字符,处理特殊字符及保留字符,例如 "\n" 和 "." ,进行匹配需表示为 "\\n" 和 "\."; {} 跟在基础表达式后面,修饰数量;
{n}n为一个非负正数,表示匹配前面的字符n次;例如 "12{2}" 可以匹配 "122";
{n,}n为一个非负正数,表示匹配前面的字符至少n次,例如 "12{2}" ,匹配不了 "12" ,可以匹配 "122222";
{n,m}n为非负正数,且n<=m,最少匹配n次且最多匹配m次,例如 "12{2,3}" 只能匹配到 "122" 和 "1222";
* 匹配前面的表达式零次或多次,例如 "12*" 可以匹配 "12" , "122" , "1" 。等价于 "{0,}"; + 匹配前面的表达式一次或多次,例如 "12+" 可以匹配 "12" , "122" 。等价于 "{1,}"; ? 匹配前面的表达式零次或一次,例如 "12?" 可以匹配 "1" , "12" 。等价于 "{0,1}";
当前面的字符为保留的元字符时,匹配模式为非贪婪模式。例如 "1*?" 会匹配 "11111" 里的单个 "1" ,而 "1*" ,则会默认匹配整个字符;
- 正则的匹配逻辑
正则表达式匹配是按照字符串从左到右的顺序,进行单个字符的逐一匹配;
1、例如需要校验一段字符串是否为纯英文。
首先纯英文字符串的特征是大写或小写,相应表达式为 "[a-zA-Z]";长度大于等于1,相应表达式为 "+";合起来就是 "^[a-zA-Z]+&"。"^" 和 "$" 用来匹配目标字符串开始和结束的位置。
2、例如需要校验一段字符串视为为邮箱。
邮箱的特征就是 "@" 前面至少有一个字符,可以是特殊字符,也可以是字母数字,相应表达式为 ".+';接着就是一个 "@" 字符,接着又是至少一个字符,这里是域名了,冷门的不管,这里限制是字母或者数字,相应表达式为 "[a-zA-Z0-9]+";接着就是一个 ".",注意 "."是正则里的保留字符,所以表达式为 "\.",接着就是域名后缀,这里限制为字母和数字,相应表达式为 "[a-zA-Z0-9]+"。合起来的表达式就是 "^.+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$"。