格式:

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

参数 flags 选项有以下3个:

PREG_PATTERN_ORDER  //是默认参数
PREG_SET_ORDER
PREG_OFFSET_CAPTURE

我们用例子来看看 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 的区别。(须查看源代码)

<?php

$str = '<a href="http://www.baidu.com/">百度</a>,
<a href="http://www.google.com/">谷歌</a>,
<a href="http://www.caiguai.net/">怪手论坛</a>'; preg_match_all('/<a href="(.*?)">(.*?)<\/a>/', $str, $matches_pattern, PREG_PATTERN_ORDER);
preg_match_all('/<a href="(.*?)">(.*?)<\/a>/', $str, $matches_set, PREG_SET_ORDER); echo "<pre>"; print_r($matches_pattern); echo "<p>"; print_r($matches_set);

$matches_pattern 返回的数据为:

Array
(
[0] => Array
(
[0] => <a href="http://www.baidu.com/">百度</a>
[1] => <a href="http://www.google.com/">谷歌</a>
[2] => <a href="http://www.caiguai.net/">怪手论坛</a>
) [1] => Array
(
[0] => http://www.baidu.com/
[1] => http://www.google.com/
[2] => http://www.caiguai.net/
) [2] => Array
(
[0] => 百度
[1] => 谷歌
[2] => 怪手论坛
) )

$matches_set 返回的数据为:

Array
(
[0] => Array
(
[0] => <a href="http://www.baidu.com/">百度</a>
[1] => http://www.baidu.com/
[2] => 百度
) [1] => Array
(
[0] => <a href="http://www.google.com/">谷歌</a>
[1] => http://www.google.com/
[2] => 谷歌
) [2] => Array
(
[0] => <a href="http://www.caiguai.net/">怪手论坛</a>
[1] => http://www.caiguai.net/
[2] => 怪手论坛
) )

而根据我之前阅读别人代码,就一直认为应该这么来组合结果:

foreach ($matches_pattern[0] as $tid=>$val) {
echo '链接:'.$matches_pattern[1][$tid];
echo '网址:'.$matches_pattern[2][$tid];
echo "\r\n";
}
/**
* 返回结果为:
*
链接:http://www.baidu.com/网址:百度
链接:http://www.google.com/网址:谷歌
链接:http://www.caiguai.net/网址:怪手论坛
*/

而PREG_SET_ORDER,就在于重新组合的数据,使得数组数据可以更方便的利用:

foreach ($matches_set as $v) {
echo '链接:'.$v[1];
echo '网址:'.$v[2];
echo "\r\n";
}
/**
* 返回结果为:
*
链接:http://www.baidu.com/网址:百度
链接:http://www.google.com/网址:谷歌
链接:http://www.caiguai.net/网址:怪手论坛
*/

正则表达式,匹配查找函数(preg_match_all)flags参数对比的更多相关文章

  1. 使用正则表达式匹配JS函数代码

    使用正则表达式匹配JS函数代码 String someFunction="init"; Pattern regex = Pattern.compile("function ...

  2. PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

    --http://www.5idev.com/p-php_preg_match.shtml 正则表达式在 PHP 中的应用 在 PHP 应用中,正则表达式主要用于: 正则匹配:根据正则表达式匹配相应的 ...

  3. Java使用正则表达式匹配多行 Pattern flags

    Java中正则匹配有多种模式,若不选择模式则默认为单行匹配 匹配模式(Pattern flags) compile()方法有两个模式 未开匹配模式 Pattern compile(String reg ...

  4. php第五天-正则表达式,字符串的匹配与查找函数,数组切割

    在php中有两套正则表达式,两者功能相似,一套是由PCRE,使用"preg_"为前缀命名的函数,一套是由POSIX拓展提供的,使用以"ereg_"命名的函数 0 ...

  5. [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化

    常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...

  6. PHP 正则表达式匹配函数 preg_match 与 preg_match_all

    preg_match() preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 . 语法: 1 int preg_match( string pattern, strin ...

  7. Excel函数匹配查找

    需求 例如:北京沃尔玛有限公司,由已知的沃尔玛缩写,将两者进行匹配. 函数 lookup() 第一个参数“Lookup_value”:是要查找的值:第二个参数“lookup_vector”:是要查找的 ...

  8. Js 利用正则表达式和replace函数获取string中所有被匹配到的文本

    js的replace函数除了替换文本以外还有获取所有被正则表达式匹配到的文本的功能.这里以一个简单的案例来作为演示. 利用正则查找出所有被两个花括号包裹的字符串: var str = '<div ...

  9. Python 正则表达式 flags 参数

    flags参数 re.I IGNORECASE 忽略字母大小写 re.L LOCALE 影响 “w, “W, “b, 和 “B,这取决于当前的本地化设置. re.M MULTILINE 使用本标志后, ...

随机推荐

  1. YTU 2903: A--A Repeating Characters

    2903: A--A Repeating Characters 时间限制: 1 Sec  内存限制: 128 MB 提交: 50  解决: 30 题目描述 For this problem,you w ...

  2. Ruby的一些常用全局变量

    $! latesterror message $@ locationof error $_ stringlast read by gets $. linenumber last read by int ...

  3. rake db:migrate 与 bundle exec rake db:migrate 的区别(copy)

    [说明:资料来自http://blog.csdn.net/lihuan974683978/article/details/8715414] 之前一直没弄明白rake  db:migrate 与 bun ...

  4. IPC进程之间通信的几种方式

    概念 进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是 共享内存区 .但是,系统空间却是 ...

  5. python 面向对象六 类属性和实例属性

    一.实例属性 Python是动态语言,根据类创建的实例可以任意绑定属性. >>> class Student(object): ... def __init__(self, name ...

  6. Unix\Linux | 总结笔记 | vi编辑器

    0 目录   新建文件夹   常用的命令    三种模式及切换    vi编辑器的启动选项及后续相关操作  其他--替换文本  其他--写入另一个文件     1  新建文件夹  vi [目录名/文件 ...

  7. Hdu 4465 Candy (快速排列组合+概率)

    题目链接: Hdu 4465 Candy 题目描述: 有两个箱子,每个箱子有n颗糖果,抽中第一个箱子的概率为p,抽中另一个箱子的概率为1-p.每次选择一个箱子,有糖果就拿走一颗,没有就换另外一个箱子. ...

  8. ACM二分查找模板

    int main(){ == key int m; while ( l <= r ) { m = ( l + r ) >> 1; if ( x[m] == key ) return ...

  9. hihoOffer收割练习20题目2

    题目2 : SCI表示法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 每一个正整数 N 都能表示成若干个连续正整数的和,例如10可以表示成1+2+3+4,15可以表示 ...

  10. 洛谷 P2312 解方程

    题目 首先,可以确定的是这题的做法就是暴力枚举x,然后去计算方程左边与右边是否相等. 但是noip的D2T3怎么会真的这么简单呢?卡常卡的真是熟练 你需要一些优化方法. 首先可以用秦九韶公式优化一下方 ...