热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式详细基础实例解析

正则表达式是我们在验证中经常用到的,本篇文章就一些常用的正则表达式基础知识利用实例进行讲解,以方便大家更好的理解这些抽象的字符含义。
正则表达式是我们验证是经常见到的!下面我和大家一起分享一下如何更简单的理解正则表达式。
首先,说一下正则名字的命名:

这个单词我想大家都会眼熟吧!“Regular Expression”。 Regular Expression的“Regular”一般被译为“正则”、“正规”、“常规”。此处的“Regular”即是“规则”、“规律”的意思,Regular Expression即“描述某种规则的表达式”之意,也就是我们所说的正则表达式。其实正则表达式说白了就是用来规范某种行为的!或者说是一种约束,就好比我们必须遵守交通规则是的。
我个人感觉如果想把正则搞懂、搞明白也不难!只要把其中的一些必须记住的东西外,再加上灵活的运用,这样就可以了!
好的! 接下来我就来深入到正则的主体,
我们来先看看正则关键的东西,如果把这些东西都搞明白了!一般在项目中就没有问题了!

第一个“\”
这个是俗称转义字符,就是把一个字符标记为一个特殊字符或者原义字符。如:“n” 就是匹配“n” 。如果是“\n” 则是换行符。
有人该问了如果我就是想写“\”这个斜杠呢? 这个也很简单啊!就直接是这样写“\\”就可以了!为什么写两个“\\”呢!就是为了区分。

第二个“^”
这个是俗称开始字符,就是说准备写正则了!如果设置了RegExp对象的Multiline属性,^也匹配“\n”或者“\r”之后的位置。

第三个“$”
这个是俗称结束字符,也可以说成收尾(很不专业的解释)!如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置

第四个“*”
这个是匹配前面的子表达式零次或者多次。如:zo*能匹配“z”以及“zo”或者“zoo”。这个“*”也就是相当于{0,}

第五个“+”
这个是匹配前面的子表达式一次或者多次。如:“zo+”能匹配“zo”以及“zoo”或者“zooo”。这个“*”和“+”差不多一个是开始零次一个是一次。这个“+”相当于{1,}。

第六个“?”
这个是匹配前面的子表达式零次或者一次。如:“do(es)?”可以匹配“do”或者“does”。这个问号的意思就是要么匹配零次要么匹配一次!

第七个“{}”
这个符号是匹配多少次的,
1,{n}匹配确定的n次,n是一个非负整数,如:“o{2}”这个的意思就是匹配两个“oo”, 如: good,food等!不过不能匹配body,因为就一个o!
2,{n,}匹配至少n次,n是个非负整数,如:“o{2,}” 这个的意思就是匹配两个以上的“oo”,如:good,goood,gooood等。“o{1,}”等价于“o+”。“o{0,}”这个等价于“o*”。
3,{n,m}这个是最少匹配n次最多匹配m次,n和m都是非负整数,其中n<=m。例如:“o{1,3}”匹配body,food,foood。不过不匹配fooood。“o{0,1}”等价于“o?”。这里写的时候要注意一下,就是逗号和两个数之间不能有空格。

第八个“?”特殊用法
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。所谓非贪婪就是以最少为好,非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

第九个“.”
匹配除换行符“\n”之外的任何单个字符。如果想匹配换行符“\n”再内的任何字符,就使用“(.|\n)”的模式。

第十个“pattern”
这个“pattern”不是很好理解,刚一看比较晕!不过我对这个的理解如下希望对大家有用:
1. ?:pattern 匹配pattern但不获取匹配结果, 例如:k(?:1|2|3) k在123中任意匹配一个,例子:k1|k2
2. ?=pattern 正向肯定预查 例如:K(?=1|2|3) 当K匹配123中任意一个时 选择K 例子:k1中的k或者k2中的k
3. ?!pattern 正向否定预查 例如:k(?!1|2|3) 当K不匹配123中的任意一个时 选择K 例子:不匹配k1中的k,不过可以是k4,k5
4. ?<=pattern 反向肯定预查 例如:(?<=1|2|3)k 当K匹配123中任意一个时 选择K 例子:1k中的k或者2k中的K
5. ?

第十一个“|”
这个符号就是或的意思,比如:“f|good”能匹配“f”或“good”,如果这样呢“(f|g)ood”则匹配“food”或“good”。

第十二个“[]”
这个符号是字符集和的意思,和“{}”看上去差不多,不过意义可就差多了。

第十三个“()”
这个符号式数组或者是集合

1、[xyz] 匹配所包含的任意一个字符。就是说三个之中选择一个。例子:“[abc]”可以匹配“company”中的“a”不过不可以匹配“beautiful”因为用到了里面的两个字母。
2、[^xyz] 这个是负值字符集合,也可以说成是“非”。例子:“[^abc]”可以匹配“drop”等!只要单词里没有“abc”这三个字母就可以。
3、[a-z] 字符的范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。也可以写成“[0-9]”这个是匹配0到9直接打数字。
4、[^a-z] 这个我想不用说大家就应该想到是什么意思了,对了!就是你想的那个意思:不在“a”到“z”范围内的任意字符,一开始我看到这个的时候以为是不在a到z之间的字母呢!我说如果不在a到z之间的字母那只有汉语中的“ü” 了!这个好像读“喻”!呵呵! 大家看清楚了啊!是字符,不是字母。

下面大家和我一起看看“\”和字母所匹配的特殊含义,
“\b” 这个是匹配一个单词的边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。这个我感觉比较好记大家可以这样记:边界的边是b开头的!
“\B”这个是和“\b”是相反的,匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
“\d”这个是用的比较多!我建议大家对这个多记记,这个是匹配数字字符,相当于[0-9]。
“\D”这个也很好理解,也是相反的意思就是说不是数字的,相当于[^0-9]。
“\f”这个是匹配一个换页符。这个不做过多解释了!下面的四个也就过多不做过多解释了。只要记住就可以了!在项目中会用就可以了!
“\n”这个是匹配一个换行符。
“\r”这个是匹配一个回车符。
“\t”这个是匹配一个制表符。
“\v”这个是匹配一个垂直制表符。
“\s”这个匹配任何空字符,匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。也就是这个把上面的五个都包括了!
“\S”这个是非空白字符等价于[^ \f\n\r\t\v]。
说到这里大家都可能感觉到正则其实就是这些字符嘛!而且有些是可以靠我们的逻辑思维推理出来的,而且有些是重复的,只要大家能够灵活的运用就可以了。

“\w”这个是匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。这个在实际中用的也挺多的也建议大家多记记这个。

“\W”这个是匹配非单词数字字符。等价于“[^A-Za-z0-9_]”。

好的!基本上要记得就是这么多了!这些可能有些正则高手该说了“你这个根本不全啊?” 我先提前解释一下吧,我所写的只是一些基础的,在项目中常见的,比较实用的,基本上这些在项目中就可以运用自如了。
接下来呢,和大家做一些实质性的东西,和大家一起解析一些正则表达式。
比如这个正则:^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$
这个正则我想对正则高手来说一看就知道是什么了。当然一些逻辑思维比较强的看两眼也就知道这个是什么了,没错就是时间正则。

OK 我们来解析一下这个正则从这个“^”开始,“([0-1]?[0-9]|2[0-3])”是个组,“[0-1]?”这个问号的作用是0或1最多有零个或者一个,“[0-9]”0至9之间任意一个数,“|”这个是“或”的意思,就是说不是“[0-1]?[0-9]”就是“2[0-3]”,“2[0-3]” 这个是前面的2就是代表2,后面0至3是0到3之间任意一个数,“:”就是代表“:”,“([0-5][0-9])”也是个组,“[0-5]”是0到5之间任意一个数,“[0-9]”是0到9之间任意一个数,“:”也是本意,“([0-5][0-9])”也是个组,“[0-5]”是0到5之间任意一个数,“[0-9]”是0到9之间任意一个数,“$”这个是结束符。
再和大家解析一个小数

比如:^[1-9]+\d*(\.[0-9]{1,2})?|0(\.[0-9]{1,2})?$
“^”是开始符,“[1-9]+”其中“+”的意思是1到9之间最少有一个或者多个,“\d*”这个“\d”是数字,这个“*”是最少有零个数字或者有多个数字,“(\.[0-9]{1,2})?”这个组里面“\.”是原意点,“[0-9]{1,2}” 0到9之间有一个或者有两个数字,后面这个问号“?”意思是有零个或者一个它“(\.[0-9]{1,2})”。“|” 是要么是“[1-9]+\d*(\.[0-9]{1,2})?”要么是“0(\.[0-9]{1,2})?”。“0(\.[0-9]{1,2})?”这个里面的0是原意,“(\.[0-9]{1,2})?”这个组里面“\.”是原意点,“[0-9]{1,2}” 0到9之间有一个或者有两个数字,后面这个问号“?”意思是有零个或者一个它“(\.[0-9]{1,2})”。

下面我例举出一些常见的正则表达式来给大家说说:

^[1-9]\d*$ //匹配正整数   
^-[1-9]\d*$ //匹配负整数   
^-?[1-9]\d*$ //匹配整数   
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)   
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)   
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数   
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数   
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数   
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)   
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ //匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
^\s*|\s*$ //匹配首尾空白字符的正则表达式
\n\s*\r //匹配空白行的正则表达式
[^\x00-\xff] //匹配双字节字符(包括汉字在内)
[\u4e00-\u9fa5] //匹配中文字符的正则表达式

用户名
^[a-z0-9_-]{3,16}$

密码
^[a-z0-9_-]{6,18}$

十六进制值
^#?([a-f0-9]{6}|[a-f0-9]{3})$

电子邮箱
^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$

URL
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

IP 地址
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)


^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

HTML 标签
^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$

以上便是关于正则表达式的一些基础知识配合实际例子的讲解,希望可以帮助到对正则表达式感到迷惑的同学,如有错误请指出。

更多相关问题请访问PHP中文网:PHP视频教程

以上就是正则表达式详细基础实例解析的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Lodop中特殊符号打印设计和预览样式不同的问题解析
    本文主要解析了在Lodop中使用特殊符号打印设计和预览样式不同的问题。由于调用的本机ie引擎版本可能不同,导致在不同浏览器下样式解析不同。同时,未指定文字字体和样式设置也会导致打印设计和预览的差异。文章提出了通过指定具体字体和样式来解决问题的方法,并强调了以打印预览和虚拟打印机测试为准。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了求解gcdexgcd斐蜀定理的迭代法和递归法,并解释了exgcd的概念和应用。exgcd是指对于不完全为0的非负整数a和b,gcd(a,b)表示a和b的最大公约数,必然存在整数对x和y,使得gcd(a,b)=ax+by。此外,本文还给出了相应的代码示例。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
author-avatar
陈政德169384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有