PHP正则表达式(超详细)

正则表达式,从入门到放弃。 我太难啦~~~~~

一段时间没用,基本就全忘光了,所以学习要养成作笔记的习惯,卑微的我这不就来开始补做笔记写博客啦。

介绍

PHP支持两种风格的正则表达式语法: POSIX 和 Perl`

这两种表达式是编译PHP时指定的默认风格,但在PHP5.3之后,POSIX 风格被弃用。

常用的正则匹配工具

在线匹配工具

  1. regexpal
  2. rubular

基础知识介绍

正则表达式是一种描述文本所包含模式的方法。

PHP 中,匹配正则表达式更像strstr()函数匹配,而不像相等比较,因为是在一个字符串的某个位置如果不指明则可能在字符串中的任何位置匹配另一个字符串。
例: 字符串shop匹配正则表达式shop,它也可以匹配正则表达式hho等正则表达式。

除了精确匹配字符外,还可以用特殊字符来指定表达式的元意义 meta-meaning
好了 巴拉巴拉说这么多基础理念小编自己看着也烦,接下来就让直接进入正题吧!

基本字符介绍

  1. 分隔符 /
    每个表达式必须包含在一対分隔符中,字符串的开始和结束都必须要有匹配的分隔符
    例: 编写一个匹配shop的正则表达式 : /shop/
  2. 模式选择 | (选择分支的开始(读为或))
    例:/com|edu|net/匹配 comedunet 字符串
  3. 模式修饰符 i
    使用模式修饰符 将以不区分大小写的方式匹配字符串
    例:不区分大小写的方式匹配shop 的正则表达式 /shop/i
  4. 方括号字符 []
    例如: /[a-z]at/ 表示限定第一个字符必须是a-z之间的字符。
  5. 脱字符号 ^
    脱字符号^用于正则表达式的开始,表示子字符串必须出现在被搜索字符串的开始处; 当脱字符号^在方括号里面时,表示否;在下面两张表中会具体介绍例子

在PCRE正则表达式中,用于方括号外面的特殊字符

字符 意义 例子
\ 转移字符 在正则表达式匹配字符 / 则使用\ 来转义 : /http:\/\//
^ 在字符开始处匹配 /^[a-z]$/ 匹配只包含a-z之间一个字符的字符串。
$ 在字符末尾处处匹配 /com$/ 匹配将以com为结束的字符串。
. 匹配除换行符\n)之外的字符 /.at/可以匹配catsatmat等字符串,适用于操作系统的文件名匹配
() 子模式 /(very )*large/可以匹配“large”、“very large”、“very very large”
* 重复出现0次或多次 [[:alnum:]]* 表示没有或多个字母字符
+ 重复出现1次或多次 [[:alnum:]]+ 表示至少有一个字母字符
? 重复出现1次或0次 [[:alnum:]]? 表示有零个或一个字母字符
{ } 最小/最大量记号 {3}表示重复三次;{2,4}重复2~4次;{2, }表示至少要重复两次。 /(very ){1,3}/表示匹配 veryvery veryvery very very

在PCRE正则表达式中,用于方括号里面的特殊字符

字符 意义 例子
\ 转义字符 在正则表达式匹配字符 / 则使用\ 来转义 : /[http:\/\//]
^ 非,仅开始处使用 /[^a-z]/ 匹配任何不在a-z之间的字符
- 用于指定符号的范围 /[a-zA-Z]/ 这个范围集代表大小写的任何字母。

用于PCRE风格正则表达式的字符类

匹配 匹配
[[:alnum:]] 文字数字字符 [[:punct:]] 标点字符
[[:alpha:]] 字母字符 [[:blank:]] 制表符和空格
[[:asci:]] ASCLL字符 [[:lower:]] 小写字母
[[:space:]] 空白字符 [[:upper:]] 大写字母
[[:cntrl:]] 控制符 [[:digit:]] 小数
[[:print:]] 所有可打印的字符 [[:xdigit:]] 十六进制小数
[[:graph:]] 除空格外所有可打印的字符 [[:word:]] “word”字符(字母数字或下划线)

PCRE正则表达式的特殊字符类型

字符类型 含义 字符类型 含义
\d 十进制数字 \S 任意非空白字符
\D 任意非十进制数字 \v 垂直空白字符
\h 水平空白字符 \V 任意非垂直空白字符
\H 任意非水平空白字符 \w 单词字符(字母、数字、下划线)
\s 空白字符 \W 任意非单词字符

回溯引用

回溯引用(backreference ,也叫反向引用),非PHP程序员一般会放弃学习和使用,我也快放弃了(哭唧唧)。
{% note success no-icon %}
模式的回溯引用是通过一个反斜杠加一个数字(根据上下文不同,也可能多个数字)

它用来匹配多次出现在一个字符串中的相同子表达式,而不用指定要具体匹配的内容
{% endnote %}
例: /1是表示第一个子模式回调引用;/2则是第二个子模式回调引用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uWQDy6Ic-1591517165761)(https://i.loli.net/2019/10/10/mdH8YOnScvhTQqC.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCNuTorA-1591517165763)(https://i.loli.net/2019/10/10/DluzGKHQSJBTVYf.png)]

在邮箱验证中应用

验证邮箱正则表达式:/^[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个字符,或者不存在

如图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9zFAVrK-1591517165764)(https://i.loli.net/2019/10/10/bC9HZOPSJxTpK4w.png)]

好了,说了这么多,是不是还是一头雾水,虽然说多写多看多用就会了,但是小编还是不会,只能看懂,稍微会写一点而已,所以很多时候我都是直接找百度搜寻我需要的正则表达式(虽然有点丢人,但是小编很诚实)。
591517165764)]

好了,说了这么多,是不是还是一头雾水,虽然说多写多看多用就会了,但是小编还是不会,只能看懂,稍微会写一点而已,所以很多时候我都是直接找百度搜寻我需要的正则表达式(虽然有点丢人,但是小编很诚实)。

你可能感兴趣的:(PHP)