`

PHP正则相关的几个函数

阅读更多

1、preg_grep()

函数原型:array preg_grep (string $pattern, array $input)
PHP函数preg_grep()返回一个数组,其中包括了$input数组中与给定的$pattern模式相匹配的单元。对于输入数组$input中的每个元素,preg_grep()也只进行一次匹配。代码给出的示例简单地说明了preg_grep()函数的使用。

 

<?php
 $subjects = array(  "Mechanical Engineering", "Medicine",  "Social Science", "Agriculture",  "Commercial Science", "Politics"  );
 //匹配所有仅由有一个单词组成的科目名
 $alonewords = preg_grep("/^[a-z]*$/i", $subjects); 
 print_r($alonewords );
?>

 


输出
Array
(
    [1] => Medicine
    [3] => Agriculture
    [5] => Politics
)
 

 

2、preg_match

 

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

这是手册里的例子。
preg_match($pattern,$string,$matcher)其中$pattern对应的就是/^(http:\/\/)?([^\/]+)/i,$string 是
http://www.php.net/index.html,$match是匹配到的结果。
按照手册上的意思:
如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
$matches[0] 将包含与整个模式匹配的文本。
咱们用pring_r打印出来第一个$matches:
Array ( [0] =>
http://www.php.net [1] => http:// [2] => www.php.net )
$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本。在正则中,()代表模式:匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。就是说数组中下标为1的值就是正则中/^(http:\/\/)?([^\/]+)/i第一个()里的值!数组下标2的值以此类推

 

 

3、preg_match_all -- 进行全局正则表达式匹配

 

int preg_match_all ( string pattern, string subject, array matches [, int flags] )

在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。

搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。

flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义):

 

PREG_PATTERN_ORDER

 

对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。

例子:
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>

本例将输出:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test

因此,$out[0] 包含匹配整个模式的字符串,$out[1] 包含一对 HTML 标记之间的字符串。

 

PREG_SET_ORDER

 

对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。

例子:
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>

本例将输出:
<b>example: </b>, example:
<div align=left>this is a test</div>, this is a test

本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。

 

PREG_OFFSET_CAPTURE

 

如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。

如果没有给出标记,则假定为 PREG_PATTERN_ORDER。

返回整个模式匹配的次数(可能为零),如果出错返回 FALSE

 

<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>
输出

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )

)

 

 

 

4、 preg_replace

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])


在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。

下例返回值为 $startDate = 6/19/1969
<?php
$patterns = array("/(19|20)\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
$replace = array("
\\3/\\4/\\1", "$\\1 =");
print preg_replace($patterns, $replace, "{startDate} = 1969-6-19");
?>

 


5、preg_split

preg_split -- 用正则表达式分割字符串
说明
array preg_split ( string pattern, string subject [, int limit [, int flags]])


返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。

如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。

 

flags 可以是下列标记的任意组合(用按位或运算符 | 组合):


PREG_SPLIT_NO_EMPTY
如果设定了本标记,则 preg_split() 只返回非空的成分。

 

PREG_SPLIT_DELIM_CAPTURE
如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。

 

PREG_SPLIT_OFFSET_CAPTURE
如果设定了本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。


例子 1. preg_split() 例子

<?php
// split the phrase by any number of commas or space characters,
// which include " ", \r, \t, \n and \f
$keywords = preg_split ("/[\s,]+/", "hypertext language, programming");
?>

 

例子 2. 将字符串分割成字符

<?php
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?>

 

 

例3

<?php
print_r(preg_split('/(a)/', 'mama', -1, PREG_SPLIT_DELIM_CAPTURE));
?>

本例将输出:
Array
(
    [0] => m
    [1] => a
    [2] => m
    [3] => a
    [4] =>
)

 

 

例子 4. 将字符串分割为匹配项及其偏移量

<?php
$str = 'hypertext language programming';
$chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>

本例将输出:

Array
(
    [0] => Array
        (
            [0] => hypertext
            [1] => 0
        )

    [1] => Array
        (
            [0] => language
            [1] => 10
        )

    [2] => Array
        (
            [0] => programming
            [1] => 19
        )

)

 

 

分享到:
评论

相关推荐

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    PHP读取文件前几个字节 判断文件类型函数 PHP连接ACCESS PHP采集程序中常用的函数 PHP随机产生指定长度中文字符串 SMTP类 url地址参数加密 一些常用验证函数 下拉-单选框选择 创建多级目录 删除数组中相同...

    PHP常用的正则验证表达式

    本类封装了以下几个验证函数,如果觉得好用希望大家给个好评,谢谢! *验证用户名 * 验证密码 * 验证eamil * 验证电话号码 * 验证手机 * 验证邮政编码 * 验证IP * 验证身份证号码 * 验证URL

    精通正则表达式~~~

    正则表达式相关的Perl教义... 293 表达式应用场合... 294 动态作用域及正则匹配效应... 295 匹配修改的特殊变量... 299 qr/…/运算符与regex对象... 303 构建和使用regex对象... 303 探究regex对象... 305 ...

    正则表达式单行、多行模式简介(使用说明)

    继上几篇正则表达式相关说明(详情:正则表达式 ),我们今天继续讨论下,它的单行,多行模式使用,及容易出现错误地方。单行,多行模式,都是正则表达式的模式修饰符里面出现的参数。目前常用正则表达式都有该使用...

    PHP 正则表达式的几则使用技巧

    我的PHP正则入门,是起源于网上的一篇文章,这篇文章由浅入深的阐述了PHP正则表达式使用的方法,我觉得是一个很好的入门材料,不过学成还是要 靠个人,在使用的过程中,还是会不断地忘记,因此反反复复的阅读了这篇...

    php正则表达式的基本语法总结

    你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边 这里还有几个字符 ‘*’, ‘+’,和 ‘?’, 他们用来表示一个字符...

    PHP正则表达式笔记与实例详解

    本文实例讲述了PHP正则表达式笔记与实例。分享给大家供大家参考,具体如下: 这里主要介绍如何在PHP使用正则表达式,并附带几个实例. 这两天工作用到了正则表达式,发现自己已经忘记的差不多了,囧啊!找来以前的学习...

    PHP和正则表达式教程集合之一第1/2页

    几个编程语言,包括Visual Basic,Perl,JavaScript和PHP都支持正则表达式,希望在这篇入门指导的结束,Mitchell(作者自己)可以让你在PHP程序中能应用一些基本的正则表达式。正则表达式是在各种各样的程序语言中突出...

    php中常用的正则表达式的介绍及应用实例代码

    更全面的实例,可以参考最常用的PHP正则表达式收集整理//www.jb51.net/article/14049.htm php 正则表达式小结//www.jb51.net/article/19831.htm PHP 正则表达式的几则使用技巧//www.jb51.net/article/19832.htm以下...

    PHP正则表达式的效率 回溯与固化分组

    先来看下问题。 字符串 代码如下: $str = ‘[removed]123456[removed... 这三个正则,分别会造成几次回溯呢?? 答案: 代码如下: $strRegex1 = ‘%[removed].+&lt;\/script&gt;%’; //9次,记得区别转义符号。 $strRegex2

    php脚本资料电子书籍

    几个php病毒的源代码 将PHP作为Shell脚本语言使 经验积累,献给PHP爱好者!!! 漂亮但不安全的CTB论坛--CTB论坛再探 如何对PHP程序中的常见漏洞进行攻击(上) 如何对PHP程序中的常见漏洞进行攻击(下) 入侵服务器...

    PHP几个实用自定义函数小结

    主要介绍了PHP几个实用自定义函数,结合实例总结分析了PHP网络操作、字符串操作、时间操作及正则表达式使用等技巧,需要的朋友可以参考下

    PHP代码审计工具V2.0.8源码20121108

    更新信息:在2.0.7版本的基础上修复一个BUG,大大优化扫描速度,增加扫描速度选择,优化代码,增加几个危险函数。 其他功能: 源码浏览:载入程序源码后,可以在最左边的程序文件列表里面点击浏览源码,扫描出包含...

    PHP和MySQL Web开发第4版pdf以及源码

    2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 ...

    php 字符串中是否包含指定字符串的多种方法

    编写程序的时候,经常要处理字符串,最基本就是字符串的查找,在php检测字符串中是否包含指定字符串可以使用正则,如果你对正则不了解,那么有几个函数可以为您提供方便。 strpos() 函数判断字符串中是否包含某字符...

    PHP入门到精通

    24.3Ajax开发需要注意的几个问题 24.4在PHP中应用AJAX技术的典型应用 Web Service与SOAP技术(教学录像:31分1秒) 25.1Web Service技术 25.2SOAP协议 25.3WSDL文档 25.4UDDI规范 25.5PHP内置SOAP类库 25.6使用...

    PHP和MySQL WEB开发(第4版)

    2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 3.2.3 使用...

    PHP入门到精通02

    24.3Ajax开发需要注意的几个问题 24.4在PHP中应用AJAX技术的典型应用 Web Service与SOAP技术(教学录像:31分1秒) 25.1Web Service技术 25.2SOAP协议 25.3WSDL文档 25.4UDDI规范 25.5PHP内置SOAP类库 25.6使用...

    PHP和MySQL Web开发第4版

    2.10.1 使用普通文件的几个问题 2.10.2 RDBMS是如何解决这些问题的 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组的初始化 3.2.2 访问数组的内容 ...

    Java-PHP-C#

    这里还有几个字符 '*', '+',和 '?', 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:"zero or more", "one or more", and "zero or one." 这里是一些例子: "ab*": 匹配字符串a和0个或者更多b组成的...

Global site tag (gtag.js) - Google Analytics