PHP正则表达式的匹配规则

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luyaran/article/details/84784511

咱们要查找数字,字母,空白很简单,因为已经有了对应这些字符的元字符,但是如果匹配没有预定义元字符的字符集合(比如元音字母a、e、i、o、u),方法很简单,在方括号里列出它们就行,如[aeiou]匹配任何一个英文元音字母,[.?! ]匹配各种标点符号以及空格等等,[]匹配单个字符,尽管内部含有好多字符,我们也可以指定范围如[0-9]和\d一样,代表一位数字,查找字符很简单,最主要的就是弄清楚字符串中什么时候需要转义。

如果我们要查找元字符本身像?等,就会出现问题,因为它们会被解释成别的意思,没有办法指定,这时就可以使用\来取消这些字符的特殊意义,这就叫做转义,通俗的说,转义就是为了防止特殊字符被解析,在JavaScript和PHP中,都有这个转义的概念,像JavaScript里的弹出对话框分行显示,使用<br>是没有用的,必须得使用\r\n。

还有就是在PHP正则里,不是所有的特殊字符都是需要转义的,只需要在可能引起歧义或者被误解析的情况下才需要转义,有些情况你转义也是不生效的,来看一段代码:

$reg = "#[ac\}d]#";
$str = "a{de}";
preg_match_all($reg,$str,$list);
var_dump($list);

类似上述代码,只要是特殊字符在表达式中,不会引起歧义,就不需要转义,大家可以扩展下思维,再次看下,咱这里只是提示一下,就不做过多的赘述了啊。

还有的时候,我们需要查找不属于某个字符类的字符,或者表达式和已知定义相反(比如除了数字之外其他的任意字符),这个时候就需要用到了反义。它有一个明显特征,和一些已知的元字符相反,并且为大写形式,如\d表示数字,\D表示非数字。

来看一些实际的例子:

1、不包含空白符的字符串,\S+

2、用尖括号括起来、以a开头的字符串,<a[^>]+>,例如<a href="http://www.luyaran.com">luyaran</a>,匹配结果就是<a href="http://www.luyaran.com">,^在这里就代表非的意思,日常工作中反义用的不多,因为会扩大范围,使得查找困难

我们再来看一种正则匹配模式分支,这个意思就是存在多种可能的匹配情况,像cat、hat这两个单词,我们可以用[ah]at来匹配,但是cat、hat、toat这三个就需要分支模式((c|h|to)at)来匹配了,这个括号中的表达式将视作一个整体,里面的|表示分支,来看一个实例:

0\d{2}-\d{8}|0\d{3}-\d{7}

上述表达式匹配两种电话号码,一是三位的区号,一是四位的区号。

再来看分组的匹配模式,也就是说,分组可以重复多个字符,看下实例:

匹配IP地址:(\d{1,3}\.){3}\d{1,3}

再来就是反向引用这个匹配模式了,它用于重复搜索前面某个分组匹配的文本。

还有就是贪婪和非贪婪的匹配模式,咱们这里就不做赘述了啊。

好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

猜你喜欢

转载自blog.csdn.net/luyaran/article/details/84784511