php正则表达式匹配中文,PHP表达式

  php正则表达式匹配中文,PHP表达式

  正则表达式简介

  在一些应用中,往往需要按照一定的规则来匹配(查找)和确认一些字符串,比如要求用户输入的QQ号码必须是至少5位数字的号码。用来描述这些规则的工具是正则表达式。

  最简单的搭配

  最简单的匹配就是直接给字符匹配。如果使用字符A匹配aabab,将匹配三个结果,分别是字符串中的第一个、第二个和第四个字符。这种匹配是最简单的情况,但在实际处理中往往要复杂得多,比如下面的“QQ号是一个至少有5位数的数字”,其对应的正则表达式为:

  ^d{5,}$

  正则表达式描述要确定的内容至少是5位数。让我们具体看看这个表达式是如何描述这个规则的:

  :表示匹配字符串的开头,即该字符串是独立的,但不包含在字符串中d:表示匹配的数字{5,}:表示至少匹配了5位或更多$:表示匹配字符串的结尾,即该字符串是独立的。

  现在明确了正则表达式,组合时匹配5位数以上的连续数字,并且有独立的开始和结束,对于5位数以下的数字,或者不是以a123456b等数字开始和结束的数字无效。

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

  同样,如果匹配手机号码的正则表达式是:

  ^1d{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]?dd?).){3}(25[0-5]2[0-4]d[01]?dd?)

  这个规则的重点是确定每段IP地址的范围从0到255,然后重复四次。在:

  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。

  常用的惰性限定符如下:

  图案修改器

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

  的常见模式修饰符如下:

  preg_replace()函数通常替换替换字符串中的反向引用,将其作为PHP代码进行计算,并用其结果替换搜索到的字符串。

php正则表达式匹配中文,PHP表达式