字符串操作在脚本中应用是很多的,字符串分割,字符串匹配,字符串的拼接等等,今天讨论一下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.genban.org'; $p = preg_match('/www[sS]*?(com)/', $str, $arr); print_r($arr); ?>
以上实例会输出:
Array
(
[0] => www.genban.org
[1] => com
)
改成$p = preg_match('/www[sS]*?(com)/', $str, $arr, PREG_OFFSET_CAPTURE);
输出:
Array
(
[0] => Array
(
[0] => www.genban.org
[1] => 0
)
[1] => Array
(
[0] => com
[1] => 10
)
)
分析:加上PREG_OFFSET_CAPTURE后数组$arr变成了二维数组,多了一项记录字符串的偏移量如上面的“0”和“10”,话说这个功能我一直没有应用过,不知道哪里能用的上,希望知道的朋友告诉一下
<?php $offset从某个位置开始搜索字符串 $str = 'www.genban.org'; 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函数用法
preg_match函数判断字符串中是否包含指定字符
<?php $str = 'www.genban.org'; if(preg_match('/qmtx3/', $str)){ echo '字符串中包含qmtx3'; }else{ echo '没有找到qmtx3'; } ?>
Tips:虽然preg_match函数能做到判断字符串是否包含另外一个字符串,但是这类判断通常使用strpos()或者strstr()效率会更高
因为自己平时很少使用preg_match函数,了解的也不多,今天查了一下资料整理了这篇关于preg_match函数各个参数所代表的意思以及preg_match函数用法的文章,如果有错欢迎大家指出
preg_match函数获取产URL中的域名
<?php preg_match("/^(http://)?([^/]+)/i", "http://www.genban.org/live", $matches); $host = $matches[2];// 从主机名中取得后面两段 preg_match("/[^./]+.[^./]+$/", $host, $matches); echo "domain name is: {$matches[0]}n"; ?>
本来想列更多preg_match函数的实例应用的,想想还是以后另外开个文章写吧,Excel match函数长的很像preg_match哦,不过是长的像功能千差万别,想了解请猛戳Excel match函数的用法
相关文章推荐:
1.php验证手机号码