《序》
PHP水平的高低取决于多方面的积累,包括系统架构、模块设计、代码规范以及php的扩展啊等等,这些概念听起来可能有些泛泛,一时半会儿也说不清;但可以肯定的是要想成为高水平的PHPer,一定得熟练地掌握PHP函数,手册中对PHP函数的说明个人觉得有些生硬,所以我决定写PHP函数系列博文,希望和大家共勉。每晚一篇。
今天给大家带来PHP正则函数preg_match。php正则函数有两个种类:Perl风格的和POSIX风格。preg_match是perl风格的,函数名开始的p就是代表perl的,reg是regular的简写,match顾名思义吧。
函数原型:
<?php preg_match ($pattern, $subject, array &$matches = null, $flags = null, $offset = null) ?>
参数注释:
$pattern //正则表达式字符串,格式为/^http{1,5}/i,写法跟JS正则表达式一样,正则的具体知识这里就不介绍了。
$subject //要搜索的字符串
$matches //要存放匹配结果,注意这个参数是引用类型,并给了默认值
$flags //
$offset //
返回值:
false ——当函数出错时
1 ——当匹配到结果时
0——未匹配到结果时
这里假设preg_match调用不出错,其实preg_match返回的是匹配结果数。大家知道一个字符串去匹配正则时可能有不只一个匹配结果,那为什么这个函数只返回0或1呢,这是因为preg_match找到一次匹配就终止搜索了。这就有点判断字符串中是否存在某某的意思?对了,就是这个意思,因为大家经常会碰到判断字符串中是否存在某某而不需要找出全部某某的情况,这个函数就是给你节省CPU和内存的。返回值1就是匹配到了,0就是未匹配到。
如果你需要把匹配的结果也取出来,那就传个数组给$matches,这个参数会把结果存起来,看个实例。
<?php $url = "http://www.sina.com.cn/abc/de/fg.php?id=1"; $matches = array();//存放匹配结果 $pattern = '/\.{1}[^.|?]+\?{1}/i'; $count = preg_match($pattern, $url, $matches); var_dump($count); var_dump($matches); ?>
输出结果:
int 1 array (size=1) 0 => string '.php?' (length=5)
以上结果合你胃口不?合,对吧。
那么再给你看个不合胃口的例子。
<?php $url = "http://www.sina.com.cn/abc/de/fg.php?id=1"; $matches = array();//存放匹配结果 $pattern = '/(\.){1}[^.|?]+(\?){1}/i'; $count = preg_match($pattern, $url, $matches); var_dump($count); var_dump($matches); ?>
猜猜会输出什么。
告诉你吧,输出是这样的。
int 1 array (size=3) 0 => string '.php?' (length=5) 1 => string '.' (length=1) 2 => string '?' (length=1)
为什么?是不是觉着不可思议了,返回值是1,数组里却存着3个结果。
对比下两段代码有什么差异,会发现只是两段代码的$pattern表面上不一样,请注意“表面上”这个用词;确实,只是表面上不一样,实际功能是一样的;不信的话用正则工具测一下。那为什么$matches数组里放的东西不一样?
进一步来说明下preg_match的匹配模式:
preg_match以匹配$pattern为主要功能,未匹配成功返回0,$matches为空数组;匹配成功返回1,$matches[0]存放匹配的结果。
如果$pattern中包含了()这种原子性的元字符,那么preg_match会视()中的字符串为子正则,比如/(\.){1}[^.|?]+(\?){1}/i 中的子正则有两个,分别是(\.){1}和(\?){1},$matches[1]会存放(\.){1}匹配的结果,$matches[2]会存放(\?){1}匹配的结果;如果包含多个子正则的话,依次类推,注意,每个子正则也只匹配一次。明白了吧!
$flags和$offset这两个参数用的情况不多,暂时就不说了,有需要再补充说明。
还有一点要说明,如果判断字符串中是否包含确定的子字符串,请使用字符串处理函数strstr。比如说要匹配ppp,就没必要使用preg_match('/ppp/','abcdpppfda'),直接使用strstr('ppp','abcdpppfda')就可以了,这样更高效。
相关推荐
在 PHP 中,preg_match 函数用于执行正则表达式匹配。为了避免绕过 preg_match 函数的功能限制,通常可以采取以下措施: 过滤用户输入:在将用户输入作为正则表达式模式使用之前,应该对其进行过滤和验证,确保用户...
Perl 兼容正则表达式(PCRE)函数是PHP中最常用的正则函数,例如`preg_match()`和`preg_match_all()`。 `preg_match()`函数用于执行单次正则匹配。它的基本语法是: ```php int preg_match(string pattern, string ...
在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串...
主要介绍了PHP preg_match实现正则表达式匹配功能,较为详细的介绍了preg_match函数的功能、参数含义、返回值及使用方法,并结合实例给出了preg_match输出是否匹配及匹配值的相关实现技巧,需要的朋友可以参考下
本文实例讲述了php使用preg_match()函数验证ip地址的方法。分享给大家供大家参考,具体如下: 代码一、正则实现 preg_match('/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)...
`preg_match_all`函数是PHP中用于全局正则表达式匹配的关键函数,它可以在一个字符串中查找所有符合特定模式的匹配项,并将这些匹配项存储在一个数组中。下面我们将详细讨论`preg_match_all`函数的使用、参数以及...
`preg_match()` 是一个用于在给定字符串中搜索符合特定正则表达式的模式的函数。它返回一个布尔值表示是否找到了匹配项。函数原型如下: ```php int preg_match(string $pattern, string $content, array &$matches...
preg_match_all函数具体说明大家可以查看PHP手册,本文运用 preg_match_all用于测试正则表达的效果。 实例代码: 复制代码 代码如下:$html = ‘”biuuu”>jb51.net</div><div id=”biuuu_2″>jb51.net2</div><div ...
在PHP中,`preg_replace()` 是一个非常重要的字符串处理函数,它用于执行正则表达式的搜索和替换。本文将深入探讨 `preg_replace()` 的使用、正则表达式修正符以及与之相关的函数。 ### `preg_replace()` 函数 `...
`preg_match_all`是PHP中的一个强大函数,用于在字符串中执行全局正则表达式匹配。以下是关于这个主题的详细讲解: 1. **使用curl进行站外采集**: - `curl`库是PHP中用于发送HTTP请求的工具,常用于网页抓取。你...
在PHP中,`preg_match`是一个非常重要的函数,用于执行正则表达式的匹配。它能够帮助开发者在字符串中查找特定的模式,而这里的 `/u`, `/i`, 和 `/s` 是正则表达式修饰符,它们对匹配行为进行特定的控制。下面我们将...
在PHP编程中,处理字符串时常常会使用到正则表达式,而`preg_match`函数是PHP中用于执行正则表达式匹配检查的一个重要函数。然而,在使用`preg_match`进行复杂模式匹配时,有时会遇到无法正确提取或匹配到内容的情况...
中加入(随便放到哪里,我是直接放第一行的) pcre.backtrack_limit=-1 再次使用preg_match函数测试一下,大概1300多行上万个字符的字符串也能够匹配了。 项目中,用preg_match正则提取目标内容,死活有问题,代码测...
- `preg_match_all`:类似`preg_match`,但会返回所有匹配的结果,而不仅仅是第一个。 - `preg_split`:根据正则表达式分割字符串。 在使用`preg_replace_callback`时,应注意确保回调函数已经定义,并且正确处理了...
`preg_match_all` 是PHP中的一个正则表达式匹配函数,它可以找到所有匹配指定模式的字符串,并返回一个数组。在这个例子中,它的任务是找出所有`<img>`标签,并提取出`src`属性的值。使用的正则表达式是: ```regex...
3. **使用预编译模式**:使用`preg_match_all()`或`preg_replace_all()`等不涉及回调函数的函数,如果可能的话,这可能更高效。 4. **升级代码库**:如果ECMall有更新的版本,确保已升级到最新,因为开发者可能已经...