在我们的编程中少不了要做各种各样的正则验证,每次都上去网上漫无目的的找吗?还是去问身边的大牛?假设现在网上没有了,大牛也放假了,让我带着大家来自己写正则验证!
先放一个小例子我们最常用的邮箱的正则验证:
-(BOOL)checkEmaliAddress:(NSString*)address
{
NSString *emailRegex=@"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
NSPredicate *p=[NSPredicate predicateWithFormat:@"SELF MATCHES%@",emailRegex];
return [p evaluateWithObject:address];
}
^:类似\b代表字符串的开始。
$:类似\b代表字符串的开始。
例:^\d{5,12}$:5到12位的数字。可以作为QQ号的正则验证。
Windows\d+:匹配windows后面跟一个或者多个数字。
^\w+:匹配以字母数字下划线开头的一个或多个字符。
[]:匹配中括号里的任意一个字符。
例:[aeiou]:匹配aeiou中的任意一个字符。
[.?!]:匹配。?!中的任一个标点符号。
[0-9]:匹配0到9中任一个数字。
[a-z0-9A-Z_]:匹配字母数字下划线中的任一个。若不考虑汉字,其作用等同于\w。
前面我们讲了几个常用的元字符和数量限制条件,大家感觉不好记也没关系最后我会将表格付到后面。
接下来我们来看一下对元字符的进一步应用
分枝条件:同时列出几种可能的规则,只要符合其中一种即可。条件之间用“|”分割。
例:0\d{2}-\d{8}|0\d{3}-\d{7}:匹配0后面跟2位数字,-后面跟8位数字,或0后面跟3位数字,-后面跟7位数字。010-33424242或0531-3442242
\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}:匹配一对小括号里面0后面跟2位数字,-或空格任选一个或都没有,后面跟8位数字。或者0后面跟3位数字,-或空格任选一个或都没有,后面跟8位数字。(010)44444444,(010)-11111111,(010) 32231234,01044444444,010-11111111,010 32231234。
\d{5}-\d{4}|\d{5}:5位数字-4位数字或者直接5位数字。匹配美国的邮政编码。
注意:使用分支条件的时候要注意每个分支条件的顺序,例如前面的例子若改为\d{5}|\d{5}-\d{4}结果就会有问题,有5位数字或9位数字的前5位即会匹配。正则的分支结构是从左到右顺序匹配的,一旦匹配满足上就不会管后面的内容。
分组:将一个表达式用小括号括起来看作一个整体,称为分组。
例:(\d{1,3}\.){3}\d{1,3}:1到3位数字重复3遍,并且每3组加".",再跟一组1到3位数字。简单的IP地址匹配。
现在我们只知道捕获的第一种语法,关于第二种和第三种接下来会讲。
反义:有时候我们要查找的不是简单定义的字符类字符串,例如除什么以外的任意字符串,就用到了反义。
例:\S+:不包含空格的任意字符串。
<a[^>]+>:用尖括号括起来的以a为开头后面除了大于号以外的所有字符串。
后向引用:使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
看的晕吗?简单的说就是将自己定义的正则规则给个命名,以后用到相同的规则可以用这个名字代替,系统有默认的名字,当然也可以重命名。
后向引用重命名:(?<name>exp)exp为自定义正则。(?:exp)好特别,既不会给将正则匹配到某个组里,也不会将使他拥有默认组号,至于这个语法的作用我也不清楚,有大神知道可以给我回复一下~~在这里拜谢了~~
零宽断言:指定一个位置,此位置要满足某种条件。其中包括零宽度正预测先行断言、零宽度正回顾后发断言。
零宽度正预测先行断言(?=exp):断言自身出现的位置的后面能匹配表达式exp
例:\b\w+(?=ing\b):匹配以ing结尾的前面有一个或多个字母数字下划线汉字。
零宽度正回顾后发断言(?<=exp):断言自身出现的位置的前面能匹配表达式exp。
例:(?<=\bre)\w+\b:匹配以re开头的后面是一个或多个字母数字下划线汉字。
负向零宽断言:确保某个字符没有出现。其中包括零宽度负预测先行断言、零宽度负回顾后发断言。
零宽度负预测先行断言(?!exp):断言此位置的后面不能匹配表达式exp。
例:\d{3}(?!\d):匹配3位数字并且3位数字的后面不能跟数字。
零宽度负回顾后发断言(?<!exp):断言此位置的前面不能匹配表达式exp。
例:(?<![a-z])\d{7}:匹配前面不是小写字母的7位数字。
例:(?<=<(\w+)>).*(?=<\/\1>):匹配不包含属性的简单HTML标签内里的内容。
未完待续。。。。
相关推荐
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
正则表达式验证工具 V1.0 本软件主要用于检测正则表达式是否正确。 运行环境:本软件为绿色软件,无需安装,但需要Microsoft .NET Framework 4 支持,如果没有请前去下载(下载路径:...
《学习正则表达式》从正则表达式的基本概念讲起,到编写完整的sed和Perl脚本,再到转换HTML文件,将这种强大的工具解释得清晰透彻。...《学习正则表达式》适合对正则表达式感兴趣的程序员和互联网从业者。
正物色一本学习正则表达式的入门图书?恭喜,《学习正则表达式》非常适合你!本书提供大量经典简洁的示例,从零开始教你逐步掌握正则表达式。通过匹配特定单词、字符和模式,读者很快就可以自己动手使用正则表达式...
正则表达式正则表达式正则表达式正则表达式 验证程序
《正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报...
让 Office Excel、WPS 表格支持正则表达式的免费插件:「Excel 正则工具」顾名思义,需要使用 “正则表达式(PCRE)” 的知识来进行操作,对于完全没有接触过正则的朋友也许有一定的入门门槛,但正则实在是太过强大...
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用...
正则表达式整理汇总,含以下内容 [1]里面在包括一个正则表达式测试小程序 RegexTester.exe [2]正则表达式30分钟入门教程.pdf] [3]正则表达式规则.doc [4]正则表达式30分钟入门教程.mht 自己整理用的,现在...
常用正则表达式 正则表达式 常用正则表达式 正则表达式
常用正则表达式大全: 匹配中文字符的正则表达式 匹配空白行的正则表达式 匹配HTML标记的正则表达式 匹配Email地址的正则表达式 匹配网址URL的正则表达式 匹配国内电话号 匹配中国邮政编码 匹配身份证 匹配ip地址 ...
java,正则表达式,详解,java正则表达式,PDF
Microsoft®.NET Framework 对正则表达式的支持是一流的,甚至在 Microsoft® ASP.NET 中也有依赖正则表达式语言的控件。本文介绍了深入学习正则表达式的基础知识和推荐内容。 本文主要面向对正则表达式知之甚少或...
随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校...
Java正则表达式Java正则表达式Java正则表达式Java正则表达式
正则表达式日期校验 正则表达式日期校验 正则表达式日期校验
C语言正则表达式库,兼容perl的正则表达式库,使用简介、方便
非常棒的正则表达式速成教程,号称30分钟叫你学会正则表达式常用用法。我本人学了一下,感觉不赖,不过俺比较笨,30分钟的东西学了3个多小时,已经从什么都不会变成会编各种复杂的正则筛选条件了^^!这个教程是配合...
UE正则表达式、UE正则表达式
日期正则表达式(很实用) 日期正则表达式(很实用)日期正则表达式(很实用)日期正则表达式(很实用)