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使用实例
php中preg正则函数使用的更多相关文章
- php中的正则函数主要有三个-正则匹配,正则替换
php中变量的声明? 由于php声明变量的时候, 不支持使用 var关键字, 又不能直接写一个变量名字, 孤零零的放在那里, 所以, 在php中声明变量的方式, 同时也是给变量初始化的形式, 即: & ...
- php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.
有一个长期的误解, 如果要分组, 必须用 小括号 和 |, 而不能用 中括号 和 |. [ab|AB]表示的不是 匹配 ab或 AB, 而是表示 匹配 a,b, |, A, B 这5个字符中 的任意 ...
- C中的正则函数sscanf
头文件 #include 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf()会将参数str的字符 ...
- SQL 中的正则函数
ORACLE中支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似,比LIKE强大得多. 2,REGEXP_INSTR :与INSTR的功能相似. 3,REGEXP ...
- PHP中常用的正则表达式由哪些元素构成?
在程序开发中,我们常常要用到正则表达式,对于新手来说,很多时候知道正则表达式是怎么回事,但当真正需要使用的时候,却不知该用什么函数,具体的修饰符也比较混乱.下面小编就为大家整理了一些php正则表达式中 ...
- 正则表达式如何直接在EXCEL中使用?
正则表达式,相信大家都不陌生.但在我们最常用的办公软件EXCEL中,目前没有可直接使用正则表达式的函数(至少10版本的EXCEL没有),那么今天我就分享下如何在EXCEL中自定义正则函数. 一.提需求 ...
- 【转】Deprecated: Function ereg_replace() is deprecated的解决方法
这个问题是因为你用的php版本过高. 在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用 ...
- 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 ...
- php 版本升高后 会出现 之Deprecated: Function ereg_replace() is deprecated的解决方法
这个问题是因为php版本过高. 在php5.3中,正则函数ereg_replace已经废弃,而dedecms还继续用.有两个方案可以解决以上问题: 1.把php版本换到v5.3下. 2.继续使用v5. ...
随机推荐
- delphi中的sql语句中空格问题
sql语句中的冒号 ‘’,在delphi中需要用四个冒号表示 ‘’‘’,delphi中的两个冒号只代表一个冒号
- “全栈2019”Java第十章:关键字
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- java 程序设计第一次作业
public class Join{ public static void main(String args[]){ String s1=new String("hello"); ...
- [AIR] AS3读取本地文件夹中的文件
import flash.filesystem.File; import flash.net.URLLoader; //var dir:File = File.desktopDirectory; // ...
- [Swift实际操作]八、实用进阶-(9)Swift中的链表LinkedList详解
链表是一种物理存储单元上的非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的.相比于线性表的顺序结构,链表比较方便插入和删除操作.本文将讲解如何模拟一个链表. //链表的节点 ...
- UItextfield各个通知和回调的顺序
成为第一响应者之前,调用delegate的textFieldShouldBeginEditing(_:)方法 成为第一响应者 发送通知UIKeyboardWillShow和UIKeyboardDidS ...
- 大数据框架:Spark vs Hadoop vs Storm
大数据时代,TB级甚至PB级数据已经超过单机尺度的数据处理,分布式处理系统应运而生. 知识预热 「专治不明觉厉」之“大数据”: 大数据生态圈及其技术栈: 关于大数据的四大特征(4V) 海量的数据规模( ...
- 2016级算法第五次上机-F.ModricWang的水系法术
1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量 ...
- MACD 的数学解释
目录 MACD 的数学解释 MACD 的一般定义 引入延迟算子 Taylor 展开 权重分析 共振? MACD 的数学解释 MACD 的一般定义 \[ \begin{align*} DIF & ...
- The model backing the 'XXX' context has changed 错误
https://blog.csdn.net/hit_why/article/details/72778785 https://blog.csdn.net/hit_why/article/details ...