首页 > 编程知识 正文

php正则表达式函数(php中正则表达式验证)

时间:2023-05-06 05:17:22 阅读:67766 作者:4951

正则表达式概述

对于某些APP应用程序,您可能需要根据某些规则匹配并验证字符串,例如要求用户提供的QQ号为数字且至少5位。 用于描述这些规则的工具是正则表达式。

最简单的匹配

最简单的匹配是直接给出字符匹配。 在字符a中匹配aabab时,字符串的第1、2和4个结果匹配。 这种匹配是最简单的情况,但在实际处理中往往要复杂得多。 例如,相应的正则表达式为^d{5,}$,例如以下“QQ编号为数字且至少5位”

该正则表达式记述应该确定的内容是至少5位以上的数字。 让我们具体看看这个公式是如何描述这个规则的。 ^ :表示匹配字符串的开始。 也就是说,它不是包含在字符串中,而是独立的开始

d :表示一致数字

{5,} :表示至少匹配5位以上

$ :表示匹配字符串的结束。 也就是说,字符串是独立的结尾

显而易见,该正则表达式综合匹配5位以上的连续数字,有独立的开始和结束,无效,如小于5位的数字,或不以数字开始和结束的a123456b。

从这个例子可以看到,正则表达式是从左到右编写的。

同样,与移动编号匹配的正则表达式为^1d{10}$

提示

由于与正则表达式的匹配结果在很多情况下不是很确定,因此建议您下载用于测试正则表达式匹配结果的辅助功能。 这些工具可以是诸如匹配跟踪器、RegExBuilder等其他类似的工具。

元字符

在上例中,^、d、$等符号表示特定匹配的含义。 这叫做元字符。 常用的元字符如下: 元字符说明

.与换行代码以外的任意字符一致

与w字符、数字或下划线匹配

s与任意空白字符一致

D火柴的数字

b匹配单词的开始或结束

^开始匹配字符串

$匹配字符串的结尾

[x]匹配字符串中的x个字符,如a、b和c个字符

Ww的反义字,即与非字母字符、数字、下划线和汉字一致的字符

与Ss的反义字,即空白字符以外的字符一致

Dd的反义字,即与数字以外的字符一致

Bb的反义,即不是单词开头或结尾的位置

[^x]与除x以外的任何字符匹配。 例如,[^abc]与除abc以外的任何字符匹配

匹配这些元字符时,必须使用字符转义功能。 同样用于在正则表达式中表示转义。 如果要匹配.符号,必须使用. 否则,将被解释为“除换行符之外的任何字符”。 当然,要匹配,必须写

连续的数字或字符可以用-符号连接。 例如,匹配所有小写字母,[1-5]匹配5个数字: 1到5

我重复一遍

正则表达式的威力在于,模式可以包含选择和循环。 正则表达式用一些重复规则表示循环匹配。

常用的重复如下。 重复说明

*重复0次以上

重复一次以上

? 重复零次或一次

重复{n}次

{n,}重复n次以上

{n,m }重复n次至m次

分枝

分枝就是制定几条规则,如果满足某一条规则,就匹配成功。 具体来说,用|符号划分各种规则,并且使条件从左向右一致。

提示

由于分支规定,如果匹配成功,就不再匹配后面的条件,所以如果想匹配有包含关系的内容,请注意规则的顺序。

下面是使用分支的例子。

美国邮政编码的规则是将五个数字或五个数字与四个数字相连,例如12345或54321-1234。 如果匹配所有邮政编码,则正确的正则表达式如下: d{5}-d{4}|d{5}

//错误的写法

d {2}|d {3}-d {4}

以下错误书写方式只与5位数字和9位数字的前5位数字匹配,与9位数字的邮政编码不匹配。

分组

在正则表达式中,可以将一些规则放在括号中进行分组,分组可以视为元字符。

分组示例,验证IP地址: (d { 1,3 }.) d { 1,3 }

这是一个与IP地址匹配的简单、不完整的正则表达式,因为它不仅匹配正确的IP地址,还匹配不存在的IP地址,如322.197.578.888。

当然,在该表达式中成功匹配后,可以使用PHP算术比较来确定IP地址是否正确。 正则表达式没有算术比较功能。 要完全匹配正确的IP地址,必须进行以下改进: ((25(0-5)|2 )0-4) d|[01]? dd? () ) 25[0-5]|2[0-4]d|[01]? dd? )

规则的说明

该规则的关键是确保IP地址的每个范围为0-255,然后重复4次。 25[0-5]|2[0-4]d|[01]? dd?

>中,用分枝首先确定了 250-255 和 200-249 。 [01]?dd? 则确定了 0-199 的范围,综合起来就是 0-255 。

贪婪与懒惰

正则表达式默认的情况下,会在满足匹配条件下尽可能的匹配更多内容。如 a.*b,用他来匹配 aabab ,它会匹配整个 aabab ,而不会只匹配到 aab 为止,这就是贪婪匹配。

与贪婪匹配对应的是,在满足匹配条件的情况下尽可能的匹配更少的内容,这就是懒惰匹配。

上述例子对应的懒惰匹配规则为:a.*?b

如果用该表达式去匹配 aabab ,那么就会得到 aab 和 ab 这样两个匹配结果。

常用的懒惰限定符如下:懒惰限定符说明

*?重复任意次,但尽可能少重复

+?重复 1 次或更多次,但尽可能少重复

??重复 0 次或 1 次,但尽可能少重复

{n,}重复 n 次以上,但尽可能少重复

{n,m}重复 n 到 m 次,但尽可能少重复

模式修正符

模式修正符是标记在整个正则表达式之外的,可以看着是对正则表达式的一些补充说明。

常用的模式修正符如下:模式修正符说明

i模式中的字符将同时匹配大小写字母

m字符串视为多行

s将字符串视为单行,换行符作为普通字符

x将模式中的空白忽略

epreg_replace() 函数在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。

A强制仅从目标字符串的开头开始匹配

D模式中的 $ 元字符仅匹配目标字符串的结尾

U匹配最近的字符串

u模式字符串被当成 UTF-8

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。