正则表达式解析
一、介绍
正则表达式是一种文本模式,它包括普通字符(例如,A和Z之间的字母)和特殊字符(称为“元字符”)。
正则表达式使用单个字符串来描述和匹配一系列符合特定语法规则的字符串。
正则表达式虽然繁琐,但是功能强大,学会之后的应用不仅会提高你的效率,还会给你带来绝对的成就感。
许多编程语言都支持使用正则表达式进行字符串操作,它的匹配模式在各种编程语言内都是大同小异。
PHP语言支持两种风格的正则表达式语法:POSIX 和 Perl。
这两个表达式是编译PHP时指定的默认样式,但是在PHP5.3之后,POSIX风格被抛弃了。
二、本人常用的正则匹配工具
菜鸟工具提供的正则表达式工具,链接:https://c.runoob.com/front-end/854
三、基本知识介绍
正则表达式是描述文本中包含的模式的一种方式。
在PHP中,匹配正则表达式更像是strstr()函数匹配而不是相等比较,因为它在一个字符串的某个位置,如果不指定,它可能在字符串的任何地方匹配另一个字符串。
例:字符串“shop”匹配正则表达式“shop”,也可以匹配h、ho等正则表达式。
除了精确匹配字符之外,特殊字符也可以用于指定表达式的元意义。
说了这么多基本理论本人也很烦
四、基础字符介绍
五、在PCRE正则表达式中,用于方括号外面的特殊字符
字符 | 意义 | 例子 |
---|---|---|
\ | 转义字符 | 在正则表达式匹配字符 / 则使用 \ 来转义:/http:\/\// |
^ | 在字符开始处匹配 | /^[a-z]$/ 匹配只包含 a-z 之间一个字符的字符串 |
$ | 在字符末尾处匹配 | /com$/ 匹配将以 com 为结束的字符串 |
. | 匹配除换行符 \n 之外的字符 | /.at/ 可以匹配cat 、sat 、mat 等字符串,适用于操作系统的文件名匹配 |
() | 子模式 | /(very)*large/ 可以匹配“large”、“very large”、“very very large” |
* | 重复出现0次或多次 | [[:alnum:]]* 表示没有或多个字母字符 |
+ | 重复出现1次或多次 | [[:alnum:]]+ 表示至少有一个字母字符 |
? | 重复出现1次或0次 | [[:alnum:]]? 表示有零个或一个字母字符 |
{} | 最小/最大 量记号 | {3} 表示重复三次;{2,4} 重复2-4次;{2, } 表示至少要重复两次 |
六.在PCRE正则表达式中,用于方括号里面的特殊字符
字符 | 意义 | 例子 |
---|---|---|
\ | 转义字符 | 在正则表达式匹配字符 / 则使用 \ 来转义:/http:\/\// |
^ | 非,进开始处使用 | /[^a-z]/ 匹配任何不在 a-z 之间的字符 |
- | 用于指定符号的范围 | /[a-zA-Z]/ 这个范围集代表大写的任何字母 |
七.用于PCRE风格正则表达式的字符类
类 | 匹配 |
---|---|
[[:alnum:]] | 文字数字字符 |
[[:alpha:]] | 字母字符 |
[[:asci:]] | ASCLL字符 |
[[:space:]] | 空白字符 |
[[:cntrl:]] | 控制符 |
[[:print:]] | 所有可打印的字符 |
[[:graph:]] | 除空格外所有可打印的字符 |
[[:punct:]] | 标点字符 |
[[:blank:]] | 制表符和空格 |
[[:lower:]] | 小写字母 |
[[:upper:]] | 大写字母 |
[[:digit:]] | 小数 |
[[:xdigit:]] | 十六进制小数 |
[[:word:]] | “word”字符(字母数字或下划线) |
八、PCRE正则表达式的特殊字符类型
字符类型 | 含义 |
---|---|
\d | 十进制数字 |
\D | 任意非十进制数字 |
\h | 水平空白字符 |
\H | 任意非水平空白字符 |
\s | 空白字符 |
\S | 任意非空白字符 |
\v | 垂直空白字符 |
\V | 任意非垂直空白字符 |
\w | 单词字符(字母、数字、下划线) |
\W | 任意非单词字符 |
九、回溯引用
回溯引用( backreference
,也叫反向引用),非PHP程序员一般会放弃学习和使用,我也快放弃了
{% note success no-icon %}
模式的回溯引用是通过一个反斜杠加一个数字(根据上下文不同,也可能多个数字)
它用来匹配多次出现在一个字符串中的相同子表达式,而不用指定要具体匹配的内容{% endnote %}
例:
/1是表示第一个子模式回调引用;
/2则是第二个子模式回调引用
十、在邮箱验证中应用
验证邮箱正则表达式:/^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]*[\.a-zA-Z0-9]{2,6}+$/
子表达式 /^[a-zA-Z0-9_\-.]+
表示“至少由一个或多个字母、数字、下划线、连字符、点号组成并且作为整个字符串开始的字符串”。请注意,当“.”用在一个字符类的开始或结束处时,它将失去其特殊通配符的意义,只能成为一个点号字符。
符号 @
匹配字符“@”。
子表达式 [a-zA-Z0-9\-]+
与由字母、数字字符和连字符组成的主机名相匹配。请注意,在这里,我们去除了连字符,因为它是方括号内的特殊字符。
字符组合 \.
匹配“.”字符。我们在字符类外部使用点号,因此必须对其转义,使其能够匹配一个点号字符。
子表达式 [a-zA-Z0-9\-]
匹配域名剩余部分,它包含字母、数字和连字符。
子表达式 *[\.a-zA-Z0-9]{2,6}+$/
匹配域名剩余部分,它包含字母、数字和连字符。最后的子表达式最多只能存在2-6个字符,或者不存在
如图