preg_match函数 实例分析preg_match函数正则匹配

新客网 XKER.COM 时间:2015-04-11 20:33:06来源:kuoyl.com  评论:

字符串操作在脚本中应用是很多的,字符串分割,字符串匹配,字符串的拼接等等,今天讨论一下preg_match函数以及通过正则表达式和preg_match函数来匹配字符串的问题

preg_match函数参数

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

在字符串$subject中查找与$pattern正则表达式相匹配的内容

参数详解:

$pattern正则表达式

$subject就是待搜索的字符串

$matches把匹配成功的内容放到这个数组中

$flags这个参数可以参数一个固定的值PREG_OFFSET_CAPTURE,如果设置为PREG_OFFSET_CAPTURE这个值时会改变$matches数组,他会在匹配成功的字符串后面添加一项该字符在整个$subject字符串中的位置偏移量,说的有点绕,通过实例应该会比较直观

<?php
$str = 'www.qmtx3.com';
$p = preg_match('/www[\s\S]*?(com)/', $str, $arr);
print_r($arr);
?>

以上实例会输出:

Array

(

[0] => www.qmtx3.com

[1] => com

)

改成$p = preg_match('/www[\s\S]*?(com)/', $str, $arr, PREG_OFFSET_CAPTURE);

输出:

Array

(

[0] => Array

(

[0] => www.qmtx3.com

[1] => 0

)

[1] => Array

(

[0] => com

[1] => 10

)

)

分析:加上PREG_OFFSET_CAPTURE后数组$arr变成了二维数组,多了一项记录字符串的偏移量如上面的“0”和“10”,话说这个功能我一直没有应用过,不知道哪里能用的上,希望知道的朋友告诉一下

<?php
$offset从某个位置开始搜索字符串
$str = 'www.qmtx3.com';
preg_match('/qmtx3/', $str, $arr, PREG_OFFSET_CAPTURE);
print_r($arr);
?>

实例输出

Array

(

[0] => Array

(

[0] => qmtx3

[1] => 4

)

)

“4”就是偏移量,如果这里增加$offset值如preg_match('/qmtx3/', $str, $arr, PREG_OFFSET_CAPTURE, 5);就搜索不到了,返回结果就是一个空数组

以下为引用内容:

5.3.6 如果 offset 比 subject 的长度还要大则返回 FALSE

5.2.2 命名子组可以接受(?<name>), (?'name') 以及(?P<name>)语法。之前版本仅接受(?P<name>)语法

4.3.3 增加了参数offset.

4.3.0 增加了标记PREG_OFFSET_CAPTURE

4.3.0 增加了参数flags

preg_match函数返回值

preg_match函数返回匹配成功的次数,由于preg_match匹配成功1次后就会立即停止,也就是说preg_match的返回值有"0",“1”,如果出现错误返回false;

preg_match与preg_match_all最大的不同点就在于preg_match匹配成功一次就停止,而preg_match_all会一直匹配下去直到字符串结束。

preg_match函数用法

  1. preg_match函数判断字符串中是否包含指定字符

    <?php
    $str = 'www.qmtx3.com';
    if(preg_match('/qmtx3/', $str)){
    echo '字符串中包含qmtx3';
    }else{
    echo '没有找到qmtx3';
    }
    ?>

    Tips:虽然preg_match函数能做到判断字符串是否包含另外一个字符串,但是这类判断通常使用strpos()或者strstr()效率会更高

    因为自己平时很少使用preg_match函数,了解的也不多,今天查了一下资料整理了这篇关于preg_match函数各个参数所代表的意思以及preg_match函数用法的文章,如果有错欢迎大家指出

  2. preg_match函数获取产URL中的域名

    <?php
    preg_match("/^(http:\/\/)?([^\/]+)/i", "http://www.qmtx3.com/live", $matches);
    $host = $matches[2];// 从主机名中取得后面两段
    preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
    echo "domain name is: {$matches[0]}\n";
    ?>

    本来想列更多preg_match函数的实例应用的,想想还是以后另外开个文章写吧,Excel match函数长的很像preg_match哦,不过是长的像功能千差万别。

本文来源:kuoyl.com

如果您喜欢本文请分享给您的好友,谢谢!如想浏览更多更好的PHP教程内容,请登录:http://www.xker.com/edu/dev/2/index.html

相关内容标签:PHP教程
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)