php正则表达式匹配中文,PHP表达式
正则表达式简介
在一些应用中,往往需要按照一定的规则来匹配(查找)和确认一些字符串,比如要求用户输入的QQ号码必须是至少5位数字的号码。用来描述这些规则的工具是正则表达式。
最简单的搭配
最简单的匹配就是直接给字符匹配。如果使用字符A匹配aabab,将匹配三个结果,分别是字符串中的第一个、第二个和第四个字符。这种匹配是最简单的情况,但在实际处理中往往要复杂得多,比如下面的“QQ号是一个至少有5位数的数字”,其对应的正则表达式为:
^\d{5,}$
正则表达式描述要确定的内容至少是5位数。让我们具体看看这个表达式是如何描述这个规则的:
:表示匹配字符串的开头,即该字符串是独立的,但不包含在字符串中\d:表示匹配的数字{5,}:表示至少匹配了5位或更多$:表示匹配字符串的结尾,即该字符串是独立的。
现在明确了正则表达式,组合时匹配5位数以上的连续数字,并且有独立的开始和结束,对于5位数以下的数字,或者不是以a123456b等数字开始和结束的数字无效。
从这个例子可以看出,正则表达式是从左到右描述的。
同样,如果匹配手机号码的正则表达式是:
^1\d{10}$
因为正则表达式的匹配结果在很多情况下并不是那么确定,所以最好下载一些辅助工具来测试正则表达式的匹配结果。诸如匹配跟踪程序、RegExBuilder和其他类似的工具也是可用的。
在上面的例子中,\d和$等符号代表特定的匹配含义,我们称之为元字符。常用的元字符如下:
当我们想要匹配这些元字符时,我们需要使用字符转义函数。同样,正则表达式使用\表示转义。如果我们想匹配。符号,我们需要使用\。否则,将被解释为“除换行符以外的任何字符”。当然,要匹配\,您需要写\ \
连续的数字或字母可以用号连接,比如匹配所有小写字母,[1-5]匹配1到5这五个数字。
正则表达式的强大之处在于它们能够在模式中包含选择和循环。正则表达式使用一些重复规则来表示循环匹配。
常用的重复如下:
分支是指制定几个规则。如果满足任何一个规则,将被视为匹配成功。具体来说,使用符号分隔各种规则,从左到右匹配条件。
因为分支规则,只要匹配成功,后面的条件都不会匹配,所以如果要匹配有包含关系的内容,请注意规则的顺序。
下面是一个使用分支的例子。
美国邮政编码的规则是5位数或5位数与4位数相连,如12345或54321-1234。如果要匹配所有邮政编码,正确的正则表达式是:
\d{5}-\d{4}\d{5}
//写错了
\d{5}\d{5}-\d{4}
下面写错的只能匹配九位的五位和前五位,不能匹配九位的邮政编码。
在正则表达式中,一些规则可以作为组包含在括号中,组可以被视为元字符。
分组示例,验证IP地址:
(\d{1,3}\。){3}\d{1,3}
这是一个用于匹配IP地址的简单且不完美的正则表达式,因为它除了可以匹配正确的IP地址外,还可以匹配不存在的IP地址,如322.197.578.888。
当然,用这个表达式简单匹配成功后,可以利用PHP的算术比较来判断IP地址是否正确。但是,正则表达式中没有算术比较函数。如果您想要完全匹配正确的IP地址,您需要对其进行如下改进:
((25[0-5]2[0-4]\d[01]?\d\d?)\.){3}(25[0-5]2[0-4]\d[01]?\d\d?)
这个规则的重点是确定每段IP地址的范围从0到255,然后重复四次。在:
25[0-5]2[0-4]\d[01]?\d\d?
在,250-255和200-249首先由分枝决定。[01]?\d\d?然后确定0-199的范围,也就是0-255。
贪婪和懒惰
默认情况下,当满足匹配条件时,正则表达式将匹配尽可能多的内容。比如a.*b,用他来配aabab。它将匹配整个aabab,而不仅仅是aab。这就是贪心匹配。
对应贪婪匹配,在满足匹配条件的情况下匹配尽可能少的内容,这就是懒匹配。
对应于上述示例的惰性匹配规则是:
a.*?b
如果用这个表达式匹配aabab,会得到两个匹配结果,aab和ab。
常用的惰性限定符如下:
图案修改器
修饰符标注在整个正则表达式之外,可以看作是对正则表达式的一些补充说明。
的常见模式修饰符如下:
preg_replace()函数通常替换替换字符串中的反向引用,将其作为PHP代码进行计算,并用其结果替换搜索到的字符串。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。