首页 > 代码库 > 0524.深入浅出理解iOS常用的正则表达式—基础篇[Foundation]
0524.深入浅出理解iOS常用的正则表达式—基础篇[Foundation]
参考资料:cocoachina的zys475481075的文章
几个单词
Regular [‘regj?l?]adj. 定期的;有规律的
Expression[?k‘spre?(?)n; ek-] n. 表现,表示
Regularexpression正则表达式
什么是正则表达式?
用一个描述字符串去验证另一个字符串是否符合描述字符串的特征。(不严谨,可以这么理解)
思考:比如表达式“12+”,描述的意思是一个1和任意个2组成的字符串,那么‘12‘、’122‘、‘122‘….都符合描述特征
正则表达式用来干嘛?
常用到的几种方式:
1、验证字符串是否符合指定要求:比如验证邮箱格式、密码个数等等
2、查找符合指定要求的字符串,这个比从父串中查找子串方便太多
3、替换,更强大
思考:正则的用途无非2种,验证、字符串的处理(查找、替换、删除之类)
正则表达式的基础知识
一、单种匹配,匹配一次
1、普通字符:字母、数字、汉字、下划线、没有特殊定义的标点
举例::表达式"c",匹配字符串"adasc",匹配结果:"c",匹配位置:始于4,结束于5
2、转义字符:有特殊意义的字符,采用前面‘\+字母’的方式替换原字符
表达式 | 匹配特征 |
\r | 回车 |
\n | 换行符 |
\t | 制表符 |
\\ | 代表\本身 |
\^ | 匹配^本身 |
\$ | 匹配$本身 |
\. | 匹配.本身 |
举例:表达式"\$d",在匹配字符串"sas$d132",匹配结果:"$d",匹配位置:始于3,结束于5
二、多种匹配,匹配一次
1、固定的多种匹配(匹配一次)
表达式 | 匹配特征 |
\d | 0~9的任意一个 |
\w | A-Z,a-z,0-9,_中的任意一个 |
\s | 空格、制表符、换页符的任意一个 |
. | 匹配除了\n外的任意一个 |
举例:表达式"a.\d",匹配"123ab11d",匹配结果:"ab1",匹配位置:始于3,结束于6
2、自定义的多种匹配(匹配一次)
使用方括号[],意思是匹配方括号里面的任意一个字符,[^]那就是匹配方括号里面字符以外的任意一个字符
表达式 | 匹配特征 |
[abc1] | "a"、"b"、"c"、"1"中的任意一个字符 |
[^abc] | 除了"a"、"b"、"c"以外的任意一个字符 |
[a-f] | a到f之间任意一个字符 |
[^a-f] | 除了a到f之间以外的任意一个字符 |
举例:表达式"[^123][456]",匹配"12345678",匹配的结果"45",匹配位置:始于3,结束于5
思考:理解[]代表其中任意一个字符,^代表字符以外的任意字符即可
三、多种匹配,匹配多次
如果想要实现多次匹配,那么就要告诉描述的表达式你想要匹配几次,这个东西就是"次数修饰",有一点需要注意的是"次数修饰"放到"被修饰的表达式"后面
表达式 | 匹配特征 |
{n} | 匹配n次 |
{m,n} | 匹配m~n之间的次数 |
{m,} | 匹配 >=m次 |
? | 匹配 0~1中间的次数 |
* | 匹配 >=0次 |
+ | 匹配 >=1次 |
举例:表达式"\d?[ab]*",匹配"abc123",匹配结果:"ab"匹配始于0,结束于2
思考:次数修饰符放到表达式后面用以表示重复的次数即可
四、特殊匹配
表达式 | 意义 |
^ | 与字符串开始的地方匹配 |
$ | 与字符串结束的地方匹配 |
\b | 匹配一个单词的边界,也就是单词和空格之间的位置(不匹配任何字符,一边是\w,一边是非\w) |
| | 前后2个表达式是"或"的关系 |
() | 1、在被修饰匹配次数的时候,括号代表一个整体 2、去匹配结果的时候,括号内的匹配内容可以被单独取到 |
举例1:表达式"\bstart\b",匹配"go,start,end",匹配结果是"start"
举例2:表达式"(go)+",匹配"let‘s gogo",匹配结果是"go go"
举例3:表达式"$(\d+\.\d*)",匹配"$12.33",匹配结果"$12.33"。单独获取括号里面的内容:"12.33"