php中preg正则函数使用

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使用实例

时间: 2024-12-28 01:44:53

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

SQL 中的正则函数

ORACLE中支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似,比LIKE强大得多. 2,REGEXP_INSTR :与INSTR的功能相似. 3,REGEXP_SUBSTR :与SUBSTR的功能相似. 4,REGEXP_REPLACE :与REPLACE的功能相似. REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函数(10g

正则表达式 -- 个人笔记

#正则表达式 ## 元字符 常见的元字符 - . 匹配换行以外的任意字符 - \w 匹配字母或者数字.下划线.汉字 - \s 匹配任意的空白字符 - \d 匹配数字 - \b 匹配单词的边界 - ^ 匹配字符串的开始 - $ 匹配字符串的结尾 - \s匹配任意的空白字符 - \S 匹配任意的非空白字符 ##字符转义 - \\匹配 - \. 匹配. - \* 匹配* - \+ 匹配 + - \^ 匹配^ - \? 匹配? ##重复 - * 表示重复0或者多次 - + 表示重复1到多次 - ? 表示

php Deprecated 解决办法

这个问题是因为php版本过高. 在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用v5.3,修改php.ini文件 ;extension=php_mbstring.dll 改为 extension=php_mbstring.dll ;mbstring.func_overload = 0 修改为: mbstring.func_overload = 7 或者使用其他的函数: define(

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

在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用v5.3,修改php.ini文件 ;extension=php_mbstring.dll 改为 extension=php_mbstring.dll ;mbstring.func_overload = 0 修改为: mbstring.func_overload = 7 或者使用其他的函数: define('DEDEADMIN', ere

PHP核心技术与最佳实践

<PHP核心技术与最佳实践>是一本致力于为希望成为中高级PHP程序员的读者提供高效而有针对性指导的经典著作.系统归纳和深刻解读了PHP开发中的编程思想.底层原理.核心技术.开发技巧.编码规范和最佳实践.全书分为5个部分:第一部分(1-2章)从不同的角度阐述了面向对象软件设计思想的核心概念.技术和原则,分析了面向对象的特性.设计模式的理念,指出了如何设计低耦合.高可扩展性的软件,等等:第二部分(3-6章)详细讲解了PHP中正则表达式的规范和使用技巧,PHP网络编程的原理.方法.技巧和一些重要的操

php中的preg系列函数

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) 如果subject是数组则返回数组,否则返回一个字符串.如果发生错误,返回 NULL .修饰符\e已经废弃,请使用preg_replace_callback $pattern,$replacement,$subject 都可以是数组也是字符串 $replacement 表示

js正则函数中test和match的区别

test是RegExp的方法,参数是字符串,返回值是boolean类型. match是String的方法,参数是正则表达式,返回值是数组. 1 <script type="text/javascript"> 2 var str="javascript is good,java"; 3 console.log(str.match(/java/gi)); //返回时数组 4 </script> var str="javascript i

MySQL中REGEXP正则表达式使用大全

REGEXP在mysql是用来执行正则表达式的一个函数 像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看. MySql用户手册建议,在构造简单查询时,仍使用通配符. 如:Select [*|fieldname list] From [tablename] where [fieldname] like ["%someletter"|"%someletter%","_&

PHP正则表达式提取html超链接中的href地址

用php的正则表达式相关函数,实现提取html超链接<a href="地址"></a>中的地址 <?php $preg='/<a .*?href="(.*?)".*?>/is'; $str ='<a href="链接1">URLNAME</a>文本段1<a href="链接2" target="_blank">URLNAME<