【程序员必学】正则表达式入门基础及应用心得——天堂带你Hold住奇葩


今天和大家分享一下正则表达式入门基础及应用心得~ 有助于各位新手学习,以下内容还有待指点改善,请各位大神级别的程序员多多建议,谢谢~——by 天堂芝士

好了,进入正题。说到正则表达式,其实应用范围极其宽泛,比如Windows的搜索、很多开发框架内、数据抓取软件等,都可能或多或少加上几句正则表达式以助软件能够更加高效和准确展示用户所需要的数据。接下来我将给大家展示我个人理解的正则表达式语法及应用,尽可能用自己的看法和理解来描述,所以可能存在一些不足之处,当然我也接受大家的建议改正。由于我php/javascript 玩的比较溜,所以我就以php/js作为讲解代码了。

先给大家了解正则表达式一些需要应用的语法符号的介绍:正则表达式应用符号分为界定符、元字符(原子集合、量词),还有修正模式。

@description:正则表达式 - 界定符:表达一个正则表达式的开始和结束。

以下是三种表达方式:
@code:/[0-9]/
@description:两个 / 号即表示开始及结束符,推荐使用这个方法

@code:#[0-9]#
@description:两个 # 号即表示开始及结束符

@code:{[0-9]}
@description:{} 号即表示开始及结束符,因为{}号在正则内为区间括入符,所以不推荐使用此方法
@description:正则表达式 - 边界控制符

@code:^
@description:匹配字符串的开始位置

@code:@description:匹配字符串结束的位置

@code:()
@description:匹配括号内为一个原子整体

PS:
@code:/^0/
@description:表示匹配以0开始的字符串

@code:/^01/
@description:表示匹配以0开始并以1结束的字符串

@code:/^(34)/
@description:表示匹配以括号内34开始的字符串

还有更多,等待大家挖掘~
@description:正则表达式 - 元字符:什么是元字符?

@code:|
@description:匹配两个或者多个可选择内容,相当于编程语言的or

@code:[]
@description:匹配方括号中任意一个原子

@code:[^]
@description:匹配方括号中原子之外的任意字符


·原子的集合:

@code:.
@description:匹配换行符之外的任意字符

@code:\d
@description:匹配任意一个十进制数字,与[0-9]等价

@code:\D
@description:匹配任意一个非十进制数字,与[^0-9]等价

@code:\s
@description:匹配一个不可见原子,与[\f\n\r\t\v]等价

@code:\S
@description:匹配一个可见原子,与[^\f\n\r\t\v]等价

@code:\w
@description:匹配任意一个数字、字母、或下划线,与[0-9a-zA-Z_]等价

@code:\W
@description:匹配任意一个非数字、字幕、或下划线的字符,与[^0-9a-zA-Z_]等价

·量词:指明原子欲匹配的数量

@code:{n}
@description:表示其前面的原子恰好出现n次

@code:{n,}
@description:表示其前面的原子至少出现n次到无穷次

@code:{n,m}
@description:表示其前面的原子至出现n次,至多出现m次,及出现在此区间内次数


以下为上方某些数量的简写表达式:

@code:*
@description:表示其前面的原子至少出现0次或者更多次(无穷次),与{0,}等价

@code:+
@description:表示其前面的原子至少出现1次或者更多次(无穷次),与{1,}等价

@code:?
@description:表示其前面的原子至少出现0次或者至多出现1次,与{0,1}等价

·PS:
不可见原子:\f、换行(\n)、(\r)、制表符(\t)  \v
可见原子:即可见的字符串内容

以上都是常见的几种或者是本人所掌握的,更多请自行挖掘吧~
@description:正则表达式 - 修正模式

@code:U
@description:懒惰模式,匹配结果存在歧义时取其短

@code:i
@description:忽略大小写匹配

@code:m
@description:将字符串视作多行,不管是字符串哪行都能匹配

@code:s
@description:将字符串视作单行,并将换行符视作普通字符匹配

@code:e
@description:配合函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行

以下是更多较专业网站提供的参考资料或工具:
Regex Tester:http://www.regexpal.com/(英文工具站点)
RegexPal:http://regexpal.isbadguy.com/(汉化版RegexPal,推荐)
在线正则表达式测试:http://tool.oschina.net/regex/(开源中国)
正则表达式:https://msdn.microsoft.com/zh-cn/library/d9eze55x(v=vs.80).aspx(微软MSDN)
正则表达式:http://baike.baidu.com/view/94238.htm(百度百科)
元字符:http://baike.baidu.com/view/1061241.htm(百度百科)

 

最后共享一个自己写的php 正则应用工具类 RegexTool.php,已经在github上开放代码~

里面有几个常用的正则表达式共享大家:

        'require'=>'/.+/',  //判断是否已输入
        'mobile'=>'/^1(3|4|5|7|8|)\d{9}/', //手机号判断
        'url'=>'/^(https?://)?(\w+\.)+[a-zA-Z]+/', //url判断全部可能 加 http:// https://  或 未加http:// https://
        'url_'=>'/^(\w+\.)+[a-zA-Z]+/',    //只判断未加 http:// https://
        'url_http'=>'/^(https?://)+(\w+\.)+[a-zA-Z]+/',    //只判断加http:// https://
        'qq'=>'/^[1-9]{5,11}/',    //qq号码判断
        'email'=>'/^\w+(\.\w+)?@\w+.+[a-zA-Z]/',   //email判断
        'number'=>'/^\d+/',    //是否为数字判断

        // 语言判断
        'chinese'=>'/^[\u2E80-\u9FFF]+/',  //汉字判断,其中\u2E80-\u9FFF为汉字unicode内码编码区间
        'english'=>'/^[a-zA-Z]$/',  //英文字母判断

地址:RegexTool.php
 

github_RegexTool


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注