正则表达式
2015-11-11 17:13
288 查看
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
^[a-z0-9]+([._\-][a-z0-9])@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+手机号码正则表达式(0|86|17951)?(13[0−9]|15[012356789]|17[678]|18[0−9]|14[57])[0−9]8
手机号码正则表达式
^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}
身份证正则表达式
(^\d{15})|(\d17([0−9]|X))|(^\d{17}([0-9]|X))
其他
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) = (‘|”)?(\w|\|\/|.)+(‘|”| *|>)?
提取信息中的邮件地址:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
提取信息中的图片链接:(s|S)(r|R)(c|C) = (‘|”)?(\w|\|\/|.)+(‘|”| *|>)?
提取信息中的IP地址:(\d+).(\d+).(\d+).(\d+)
提取信息中的中国手机号码:(86)*0*13\d{9}
提取信息中的中国固定电话号码:((\d{3,4})|\d{3,4}-|\s)?\d{8}
提取信息中的中国电话号码(包括移动和固定电话):((\d{3,4})|\d{3,4}-|\s)?\d{7,14}
提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
提取信息中的中国身份证号码:\d{18}|\d{15}
提取信息中的整数:\d+
提取信息中的浮点数(即小数):(-?\d*).?\d+
提取信息中的任何数字 :(-?\d*)(.\d+)?
提取信息中的中文字符串:[\u4e00-\u9fa5]*
提取信息中的双字节字符串 (汉字):[^\x00-\xff]*
行定位符涌来描述字符串的边界,^表示从匹配内容的开头进行匹配,表示匹配到匹配内容的结尾。
例如:^w ^wc kkfc kfc
如果匹配字符可以出现在匹配内容的任何位置 wc 即可
思考:^3这是个啥?2,单词界定符号(\b,\B)\b表示要查找的字符串为一个单词的开始或者结束:\bwc\b;\B表示匹配的字符串不是完整单词,而是单词一部分:\Bwc\B.思考:\bwc\B3,字符类([])[]表示一个字符允许匹配的不同情况。比如wc不区分大小写匹配:[wW][cC],[0123456789],[abcdefghijklmnopqrstuvwxyz]思考:[0123456789]这是个啥?
2,单词界定符号(\b,\B)
\b表示要查找的字符串为一个单词的开始或者结束:\bwc\b;\B表示匹配的字符串不是完整单词,而是单词一部分:\Bwc\B.
思考:\bwc\B
3,字符类([])
[]表示一个字符允许匹配的不同情况。比如wc不区分大小写匹配:[wW][cC],[0123456789],[abcdefghijklmnopqrstuvwxyz]
思考:^[0123456789]
4,选择字符(|)
跟3很相似
[w|W][c|C].
提示,中间用,隔开也跟|相似。
5,连字符(-)
连字符表示某个字符允许匹配的字符范围
[0-9],表示从0到9
[a-z],表示从a到z
[A-Z],表示从A到Z
思考:[a-z0-9] [A-Za-z0-9_]
6,排除字符([^])
表示匹配不符合规则命名的变量
[^a-z]
7,限定符(? * + {n,m})
?匹配前面的字符零次或者一次
* 匹配前面的字符零次或者多次
+ 匹配前面的字符一次或者多次
{n} 匹配前面的字符n次
{n,} 匹配前面的字符至少n次
{n,m} 匹配前面的字符至少n次,最多m次
8,点字符(.)
匹配除了换行以外的任意一个字符
^c.t$
9,转义字符()
[0-9]{3}(.[0-9]{3}){3}
10 反斜线()
除了转义字符\还有更多功能。
11,括号字符()
作用1,改变限定字符的作用范围,如| * ^等:
(thir|four)th
作用2,分组也叫子表达式
[0-9]{3}(.[0-9]{3}){3}
12,反向引用
反向引用,就是依靠子表达式的“记忆”功能来匹配连续出现的字串或字母。如匹配连续两个it,首先将单词it作为分组,然后在后面加上“\1”即可。格式为:
(it)\1
这就是反向引用最简单的格式。如果要匹配的字串不固定,那么就将括号内的字串写成一个正则表达式。如果使用了多个分组,那么可以用“\1”、“\2”来表示每个分组(顺序是从左到右)。如:
([a-z])([A-Z])\1\2
self.regexTF.text–正则表达式内容
self.contentTF.text–校验内容
2.利用rangeOfString:option:直接查找
3.使用正则表达式类
常用正则表达式
邮箱正则表达式:^[a-z0-9]+([._\-][a-z0-9])@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+手机号码正则表达式(0|86|17951)?(13[0−9]|15[012356789]|17[678]|18[0−9]|14[57])[0−9]8
手机号码正则表达式
^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}
身份证正则表达式
(^\d{15})|(\d17([0−9]|X))|(^\d{17}([0-9]|X))
其他
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) = (‘|”)?(\w|\|\/|.)+(‘|”| *|>)?
提取信息中的邮件地址:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
提取信息中的图片链接:(s|S)(r|R)(c|C) = (‘|”)?(\w|\|\/|.)+(‘|”| *|>)?
提取信息中的IP地址:(\d+).(\d+).(\d+).(\d+)
提取信息中的中国手机号码:(86)*0*13\d{9}
提取信息中的中国固定电话号码:((\d{3,4})|\d{3,4}-|\s)?\d{8}
提取信息中的中国电话号码(包括移动和固定电话):((\d{3,4})|\d{3,4}-|\s)?\d{7,14}
提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
提取信息中的中国身份证号码:\d{18}|\d{15}
提取信息中的整数:\d+
提取信息中的浮点数(即小数):(-?\d*).?\d+
提取信息中的任何数字 :(-?\d*)(.\d+)?
提取信息中的中文字符串:[\u4e00-\u9fa5]*
提取信息中的双字节字符串 (汉字):[^\x00-\xff]*
正则语法
1,行定位符(^和)行定位符涌来描述字符串的边界,表示从匹配内容的开头进行匹配,)行定位符涌来描述字符串的边界,^表示从匹配内容的开头进行匹配,表示匹配到匹配内容的结尾。
例如:^w ^wc kkfc kfc
如果匹配字符可以出现在匹配内容的任何位置 wc 即可
思考:^3这是个啥?2,单词界定符号(\b,\B)\b表示要查找的字符串为一个单词的开始或者结束:\bwc\b;\B表示匹配的字符串不是完整单词,而是单词一部分:\Bwc\B.思考:\bwc\B3,字符类([])[]表示一个字符允许匹配的不同情况。比如wc不区分大小写匹配:[wW][cC],[0123456789],[abcdefghijklmnopqrstuvwxyz]思考:[0123456789]这是个啥?
2,单词界定符号(\b,\B)
\b表示要查找的字符串为一个单词的开始或者结束:\bwc\b;\B表示匹配的字符串不是完整单词,而是单词一部分:\Bwc\B.
思考:\bwc\B
3,字符类([])
[]表示一个字符允许匹配的不同情况。比如wc不区分大小写匹配:[wW][cC],[0123456789],[abcdefghijklmnopqrstuvwxyz]
思考:^[0123456789]
4,选择字符(|)
跟3很相似
[w|W][c|C].
提示,中间用,隔开也跟|相似。
5,连字符(-)
连字符表示某个字符允许匹配的字符范围
[0-9],表示从0到9
[a-z],表示从a到z
[A-Z],表示从A到Z
思考:[a-z0-9] [A-Za-z0-9_]
6,排除字符([^])
表示匹配不符合规则命名的变量
[^a-z]
7,限定符(? * + {n,m})
?匹配前面的字符零次或者一次
* 匹配前面的字符零次或者多次
+ 匹配前面的字符一次或者多次
{n} 匹配前面的字符n次
{n,} 匹配前面的字符至少n次
{n,m} 匹配前面的字符至少n次,最多m次
8,点字符(.)
匹配除了换行以外的任意一个字符
^c.t$
9,转义字符()
[0-9]{3}(.[0-9]{3}){3}
10 反斜线()
除了转义字符\还有更多功能。
11,括号字符()
作用1,改变限定字符的作用范围,如| * ^等:
(thir|four)th
作用2,分组也叫子表达式
[0-9]{3}(.[0-9]{3}){3}
12,反向引用
反向引用,就是依靠子表达式的“记忆”功能来匹配连续出现的字串或字母。如匹配连续两个it,首先将单词it作为分组,然后在后面加上“\1”即可。格式为:
(it)\1
这就是反向引用最简单的格式。如果要匹配的字串不固定,那么就将括号内的字串写成一个正则表达式。如果使用了多个分组,那么可以用“\1”、“\2”来表示每个分组(顺序是从左到右)。如:
([a-z])([A-Z])\1\2
ios中正则表达式示例
1.利用NSPredicate(谓词)匹配self.regexTF.text–正则表达式内容
self.contentTF.text–校验内容
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", self.regexTF.text]; BOOL isValid = [predicate evaluateWithObject:self.contentTF.text]; if (isValid) { self.resultLabel.text=@"匹配"; }else self.resultLabel.text=@"不匹配";
2.利用rangeOfString:option:直接查找
NSRange range = [self.contentTF.text rangeOfString:self.regexTF.text options:NSRegularExpressionSearch]; if (range.location != NSNotFound) { self.resultLabel.text=[self.contentTF.text substringWithRange:range]; }else{ self.resultLabel.text=@"no see"; }
3.使用正则表达式类
NSError *error = NULL; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:self.regexTF.text options:NSRegularExpressionCaseInsensitive error:&error]; NSTextCheckingResult *result = [regex firstMatchInString:self.contentTF.text options:0 range:NSMakeRange(0, [self.contentTF.text length])]; if (result) { NSLog(@"%@\n", [self.contentTF.text substringWithRange:result.range]); self.resultLabel.text=@"匹配"; }else{ self.resultLabel.text=@"不匹配"; }
相关文章推荐
- (转)理解Javascript_02_理解undefined和null
- 1111评论
- 1111 评论
- 对10位同学的文法解释和语法树的评论
- TestNG注解相关知识点介绍
- 递归截取字符 根据包名字截取到类名
- 冒泡排序
- 第七章 注解式控制器的数据验证、类型转换及格式化(2)——跟着开涛学SpringMVC
- windows中Eclipse打开当前文件所在文件夹
- 解决TimePickerDialog中onTimeSet和 DatePickerDialog中onDateSet执行两次的问题
- C++中的字符串操作<cstring>和<string>的区别
- List<?super T> 和 Set<? extends T> 区别
- Android四大组件之BroadCastReceiver
- Linux TTY驱动--Uart_driver底层
- Ubuntu 14.04使用
- 实现图片预加载的三大方法
- UITextView
- spark on yarn 集群部署
- VI文本编辑器常用用法集锦 | CENTOS下使用VI命令必看
- jQuery.form提交复杂表单