正则表达式(RegularExpression),又称正则表达式、正则表达式,在实际的软件开发项目中经常会用到。它使用单个字符串来描述、匹配并获得符合一定语法规则的结果序列。正则表达式的起源1956年,数学家StephenKleene根据WarrenMcCulloch和WalterPitts的早期神经系统工作设计了一个数学符号系统——正则集(一组规则),很快被计算机科学家用来扫描或词法分析由编译器。由于正则表达式强大的文本处理能力,很快被应用于Unix工具软件grep;此后,正则表达式被广泛应用于Unix操作系统、Perl、PHP、Delphi、JAVAScript、C#(.NET)、Java、python、Ruby等语言和开发环境。正则表达式定义正则表达式是描述字符串特定结构(规则)的语言,由相关引擎执行。正则表达式的可视化描述如图1所示。图1正则表达式的可视化描述正则表达式的作用1.数据验证测试输入的字符串是否符合一定的规则,是否允许输入等。例如有效性可以验证电子邮件地址、网站地址、电话号码、出生日期等。2.操纵文本用于识别文档中的特定文本,完全删除文本,或用其他文本或字符替换。3.子串的提取基于模式匹配,可以在文档或输入域中搜索特定的文本。当涉及到替换操作时,往往需要先提取。正则表达式的基本语法1.字面字符(通常是不可见字符和匹配自身的字符)2.字符类(可以匹配多个字符)3.重复4.选择、分组和定位字符5.Flags(标记的工作方式engine)解释:在正则表达式前加上“(?i)”,例如:(?i)^root$,则root、Root、ROOT都满足要求。6.其他1)匹配元字符“([{\^$|)?*+.”需要用“\”进行转义。例如:匹配“.”,正则表达式为“\.”。2)贪婪量词和惰性量词惰性量词只是加一个“?”在贪婪量词之后。匹配贪心量词时,会先将整个字符串视为匹配,匹配成功则退出;如果不匹配,则截断最后一个字符进行匹配;如果不匹配,则继续截断最后一个匹配的字符,直到匹配到一个字符。与惰性量词匹配时,首先认为第一个字符匹配,成功则退出;如果失败,它会测试前两个字符,依次增加直到遇到合适的匹配项。例如:“\d+”是贪心量词,而“\d+?”是一个非贪婪(惰性)量词。3)子匹配中的组匹配,用“()”来标记一个组。每组子匹配都放在一个特殊的地方以备将来使用,而这些存储的值是组中的特殊值,称为反向引用。例如:验证输入是日期,然后提取月份,正则表达式为“^\d{4}\-(\d{2})\-\d{2}$”。4)Positivelookahead和negativelookaheadPositivelookahead:(?<=character)or(?=character)注意:必须相等。负前瞻:(?”之间的字符,但不包括“<>”,其正则表达式:(?<=<)[\w]+(?=>)正则表达式的常用用法1.数字1)正整数:^[1-9][0-9]*$2)非正整数:^((-[1-9][0-9]*)|(0))$3)负整数:^-[1-9][0-9]*$4)整数:^(0|-?[1-9][0-9]*)$5)非负浮点数:^\d+(\.\d+)?$2。字母1)英文字符串:^[A-Za-z]+$2)英文大写字符串:^[A-Z]+$3)英文小写字符串:^[a-z]+$4)英文字符和数字字符串:^[A-Za-z0-9]+$5)英文数字加下划线字符串:^\w+$3。其他1.邮箱地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$2。网址:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$3。邮政编码:^[1-9]\d{5}$4。中文:^[\u4e00-\u9fA5]+$5。电话号码:^((\d2,3)|(\d{3}\-))?(0\d2,3|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$6。手机号码:^1\d{10}$7.前导和尾随空格:(^\s+)|(\s+$)8。身份证:^(\d{15}|\d{18})$(注:中国身份证为15位或18位)9.账号:^[a-zA-Z]\w{4,15}$(注意:字母开头,允许5-16字节,字母和数字允许下划线)10.IP:^([1-9]\d{0,1}|1\d{2}|2[0-4]\d|25[0-5])(\.([1-9]\d{0,1}|1\d{2}|2[0-4]\d|25[0-5])){3}$(IP由0和25组成5个数字和“.”,只是验证每个数字子项然后用“.”拼接。)综上所述,正则表达式的功能是非常强大的,只有在实际使用中才能体会到。当然,你必须同时记住这么多正则表达式规则并不容易。可以把常用的正则表达式记录下来(就像本文一样),需要的时候可以拿出来参考。【本文为专栏作家周兆雄原创,转载请征得作者授权】
