元字符:\b 与\B
他们两个叫做边界元字符
讲它之前先复习一下:
\w 表示数字,字母与下划线
\W 表示\w以外的字符
那么\b 表示边界含义就是 一个\w与一个\W字符之间的边界
同样 \B 表示为上面的反面
\B 表示一个\w与一个\w,或者一个\W与一个\W之间的边界
元字符:^ 与$
其实^这个符号我们第一篇文章里学习过
[0-9] 与[^0-9] 我们发现它在[]里面表示的是一个补集的概念!
而这里我们讲的是不放在[]里面的^
它叫字符串边界符
^ 匹配字符串头部 $ 字符串尾部
扩展含义:在正则表达式前面加(?m)后,开启分行匹配模式(不是所有的都支持分行匹配)
^还可以匹配行分隔符(换行符)后面开始的问题
$还可以匹配行分隔符(换行符)后面结束的问题
子表达式()
作用:
1.提升优先级
2.在iOS中,一个正则表达式对像regx,range方法传入0,取到是这个正则表达式本身匹配的结果
range方法传入1,表示使用从左到右数第一个子表达式匹配出的结果集合
举例 @"(.+)" 匹配的是是OC字符串,当时rang传入1 匹配出的就是纯字符串了。
range 0 匹配出的结果是 @“123”,range 1 匹配出结果是 123,
有很多h5程序员使用 来代替非换行型空格。
我们怎么匹配这个呢?
{2}
这样我们只能匹配 ; 因为次数集合只对紧挨着它的前一个字符有效果。
使用字表达式就可以解决这个问题
( ){2}
应用举例:ip地址的匹配
\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
使用字表达式后
(\d{1,3}.){3}\d{1,3}
字表达式应用举例 如匹配年份 19|20\d{2}
可以匹配19 与20xx 但是不能完全匹配1998,
以为|这个或者元字符的优先级太高了!加入子表达式()可以解决优先级问题
(19|20)\d{2}
字表达式的嵌套使用 ,同样匹配ip地址,但是数字不能大于255,如下:
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
Ps:正则表达式只是字符的匹配,并没有什么的数值的逻辑运算处理,所以<= 255真的很难处理。只能按照上面的处理方式进行处理。