正则表达式是我们验证是经常见到的!下面我和大家一起分享一下如何更简单的理解正则表达式。
首先,说一下正则名字的命名:
这个单词我想大家都会眼熟吧!“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中文网其他相关文章!

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器