`

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中几个能够替代正则表达式进行字符串操作的函数,并解释它们的使用方法和适用场景。 首先,我们来看strtok()函数,这是一个用于将字符串分割成多个元素的函数。strtok()通过预定义的字符集(即...

    PHP 正则表达式常用函数_.docx

    通过以上介绍,我们可以看到`preg_match()`、`ereg()`、`eregi()`、`ereg_replace()`和`eregi_replace()`这几个函数在PHP中是非常强大的工具,可用于执行复杂的字符串操作和模式匹配任务。在实际应用中,合理选择和...

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

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

    php 正则表达式简单介绍

    ### PHP正则表达式简介与应用 正则表达式(Regular Expression)是一种强大的文本处理工具,在各种编程语言中都有广泛的应用。在PHP中,正则表达式被用于字符串搜索、替换以及验证等操作,是进行数据处理的重要手段...

    php常用正则表达式类.zip

    在使用这个类库时,首先需要解压"php常用正则表达式类.zip"文件,将里面的PHP类文件引入到项目中,然后根据需要实例化相应的类并调用相关方法。例如: ```php require_once 'path/to/RegularExpressionClass.php'; ...

    php正则表达式全集

    在PHP中,处理正则表达式的函数主要包括以下几个: 1. **`preg_match()`**:用于检测给定的正则表达式是否与字符串相匹配。 2. **`preg_match_all()`**:查找所有匹配项并返回它们。 3. **`preg_replace()`**:执行...

    正则表达式链接替换函数的技巧

    示例代码片段中提供的一个函数`FunctionScriptHtml`,这个函数根据传入的`FType`参数,使用了不同的正则表达式进行匹配和替换。这种设计允许用户根据不同的需求,灵活地使用不同的正则表达式模式来处理字符串。 在...

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

    理解正则表达式的关键在于掌握以下几个核心概念: 1. **元字符(Meta-character)**:元字符具有特殊含义,比如`\A`表示字符串的开始,`\Z`表示字符串的结束,`\b`用于匹配单词边界,`\d`匹配数字,`\D`匹配非数字...

    基于PHP的正则表达式在线测试 php版.zip

    2. `preg_match_all()`:与`preg_match()`类似,但这个函数会返回所有匹配的结果,而不仅仅是第一个。 3. `preg_replace()`:这个函数用于查找字符串中的指定模式,并用新的字符串替换它们。 4. `preg_split()`:...

    PHP 正则表达式常用函数

    本文将重点介绍PHP中几个常用的正则表达式函数,帮助开发者更好地理解和运用正则表达式。 首先,`preg_match()`是PHP中最常用的正则表达式匹配函数。它的功能是在`$content`字符串中查找与`$pattern`定义的正则...

    php正则表达式——记忆卡

    为了更好地理解和应用PHP正则表达式,我们将通过几个实际案例来加深印象。 ##### 3.1 邮箱地址验证 ```php function validateEmail($email) { return preg_match('/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2...

    PHP常用的正则验证表达式

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

    【收藏版】php正则表达式

    下面将详细介绍 PHP 中常用的几个正则函数: 1. **preg_match**:用于检测字符串是否与正则表达式匹配。此函数返回匹配次数,通常用于确定是否至少存在一次匹配。 ```php $str = "hello world"; $match_result ...

    正则表达式学习心得 v1.0

    本文旨在分享作者在学习正则表达式过程中的心得体验,并重点介绍了几种常见编程语言(Python、C#、PHP)及文本编辑器(Notepad++)中正则表达式的使用技巧。此外,还特别对比了不同语言之间正则表达式的异同之处。 ...

    精通正则表达式~~~

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

    PHP实例开发源码—正则表达式在线测试 php版.zip

    该实例中的源码可能包含以下几个关键部分: 1. 用户界面:一个HTML表单,允许用户输入正则表达式和测试字符串。 2. 后端处理:PHP脚本接收表单数据,调用preg系列函数进行匹配、替换或拆分操作,并将结果返回给前端...

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

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

Global site tag (gtag.js) - Google Analytics