1.preg_match和preg_match_all的区别

preg_match和 preg_match_all区别是preg_match只匹配一次。而preg_match_all全部匹配,直到字符串结束。例:

<?php
//注:正则 /a.+?e/ 是非贪婪模式(因为量词‘+’后面加上了‘?’),如果使用 /a.+?e/U 则变回了贪婪模式
preg_match("/a.+?e/","abcdefgabcdefgabcdefg",$out1);
preg_match_all("/a.+?e/","abcdefgabcdefgabcdefg",$out2);
var_dump($out1);
var_dump($out2);
/*
输出:
array (size=1)
0 => string 'abcde' (length=5) array (size=1)
0 =>
array (size=3)
0 => string 'abcde' (length=5)
1 => string 'abcde' (length=5)
2 => string 'abcde' (length=5)
*/
?>

2.贪婪模式和非贪婪模式的区别

如:String str="abcaxc";

  Patter p="ab*c";

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

非贪婪匹配:就是匹配到结果就好,较少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

例:

<?php
$str = "http://www.baidu/.com?url=www.sina.com/";
preg_match("/http:(.*)com/", $str, $matches1); //贪婪匹配
var_dump($matches1); preg_match("/http:(.*?)com/", $str, $matches2); //非贪婪匹配(量词'*'后面跟上了'?')
var_dump($matches2); /*
array (size=2)
0 => string 'http://www.baidu/.com?url=www.sina.com' (length=38)
1 => string '//www.baidu/.com?url=www.sina.' (length=30) array (size=2)
0 => string 'http://www.baidu/.com' (length=21)
1 => string '//www.baidu/.' (length=13)
*/
?>

3.preg_match_all参数PREG_PATTERN_ORDER(默认)和PREG_SET_ORDER的区别

<?php
echo('PREG_PATTERN_ORDER');
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>start: </b><b>this is a test</b><b>end</b>",
$out1);
var_dump($out1); echo('PREG_SET_ORDER');
preg_match_all("|<[^>]+>(.*)</[^>]+>|U",
"<b>start: </b><b>this is a test</b><b>end</b>",
$out2, PREG_SET_ORDER);
var_dump($out2); /*
PREG_PATTERN_ORDER
array (size=2)
0 =>
array (size=3)
0 => string '<b>start: </b>' (length=14)
1 => string '<b>this is a test</b>' (length=21)
2 => string '<b>end</b>' (length=10)
1 =>
array (size=3)
0 => string 'start: ' (length=7)
1 => string 'this is a test' (length=14)
2 => string 'end' (length=3) PREG_SET_ORDER
array (size=3)
0 =>
array (size=2)
0 => string '<b>start: </b>' (length=14)
1 => string 'start: ' (length=7)
1 =>
array (size=2)
0 => string '<b>this is a test</b>' (length=21)
1 => string 'this is a test' (length=14)
2 =>
array (size=2)
0 => string '<b>end</b>' (length=10)
1 => string 'end' (length=3)
*/
?>

延伸阅读:preg_match_all使用实例

php中preg正则函数使用的更多相关文章

  1. php中的正则函数主要有三个-正则匹配,正则替换

    php中变量的声明? 由于php声明变量的时候, 不支持使用 var关键字, 又不能直接写一个变量名字, 孤零零的放在那里, 所以, 在php中声明变量的方式, 同时也是给变量初始化的形式, 即: & ...

  2. php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.

    有一个长期的误解, 如果要分组, 必须用 小括号 和 |, 而不能用 中括号 和 |. [ab|AB]表示的不是 匹配 ab或 AB, 而是表示 匹配 a,b, |, A, B 这5个字符中 的任意 ...

  3. C中的正则函数sscanf

    头文件 #include 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf()会将参数str的字符 ...

  4. SQL 中的正则函数

    ORACLE中支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似,比LIKE强大得多. 2,REGEXP_INSTR :与INSTR的功能相似. 3,REGEXP ...

  5. PHP中常用的正则表达式由哪些元素构成?

    在程序开发中,我们常常要用到正则表达式,对于新手来说,很多时候知道正则表达式是怎么回事,但当真正需要使用的时候,却不知该用什么函数,具体的修饰符也比较混乱.下面小编就为大家整理了一些php正则表达式中 ...

  6. 正则表达式如何直接在EXCEL中使用?

    正则表达式,相信大家都不陌生.但在我们最常用的办公软件EXCEL中,目前没有可直接使用正则表达式的函数(至少10版本的EXCEL没有),那么今天我就分享下如何在EXCEL中自定义正则函数. 一.提需求 ...

  7. 【转】Deprecated: Function ereg_replace() is deprecated的解决方法

    这个问题是因为你用的php版本过高. 在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用 ...

  8. php5.3不支持 ereg、ereg_replace等函数问题,如提示:Deprecated: Function ereg() is deprecated

    在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用v5.3,修改php.ini文件 ;e ...

  9. php 版本升高后 会出现 之Deprecated: Function ereg_replace() is deprecated的解决方法

    这个问题是因为php版本过高. 在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用v5. ...

随机推荐

  1. PostgreSQL按年月日分组

    Select EXTRACT(year from cast(joindate as timestamp)) as Year, EXTRACT(month from cast(joindate as t ...

  2. 使用InstallUtil安装或卸载服务

    使用InstallUtil安装或卸载服务 一.安装服务: C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe D:\MyServ ...

  3. VMware桥接模式下实现局域网的互通

    在 VMware worktaion pro 14 版本中,创建了 windows server 2003 和 windows xp 两台虚拟机,现在要让它们组成一个局域网(不连接到外网),以下是具体 ...

  4. Blocks to Cubes

    Bholu the Pandit on this New Year wanted to divide his Cuboidal Packaging block into cubes. But he l ...

  5. Crash的数字表格

    Crash的数字表格 求\(\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)\) 解 设\(N<M\),显然有 \[\sum_{i=1}^N\sum_{j=1}^M\frac{i ...

  6. Ehcache和MemCached区别及应用

    ehcache是纯Java编写的,通信是通过RMI方式,适用于基于java技术的项目.memcached服务器端是c编写的,客户端有多个语言的实现,如c,PHP(淘宝,sina等各大门户网站),Pyt ...

  7. springMVC引入js,css文件404

    在web.xml中配置静态资源文件过滤 <!--静态文件引入--> <servlet-mapping> <servlet-name>default</serv ...

  8. iOS hook原理

    OC中的method其实是一个结构体 struct objc_method{ SEL method_name char *method_types IMP method_imp } SEL是方法名,I ...

  9. 通过cookie绕过验证码登录

    在我们做自动化的时候碰到一些比较难破解的验证码时是非常头疼的,一般来说最好的办法就是让开发屏蔽,这样最有益身心健康. 那么今天我介绍的这个方法也挺简单的,就是通过添加cookie的方式绕过验证码直接登 ...

  10. JAVA 集合随笔

    JAVA中提供了现成操纵数据的集合,使得我们在开发中基本不用自己动手实现复杂的数据结构,来保存和操纵数据. 所以当我们有了基本的数据结构知识,会合理利用JAVA提供的集合就好啦. JDK1.8;(仅列 ...