php正则表达式高级技巧及实例(Perl兼容)

正则表达式(Regular Expression, abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息。它利用约定俗成的字符结构表达式来发生作用。不幸的是,简单的正则表达式对于一些高级运用,功能远远不够。若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式。

本文为您介绍正则表达式的高级技巧。我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满足 某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解,请先阅读这篇文章,或者这个教程,或者维基条目。

这里的正则语法适用于PHP,与Perl兼容。

1. 贪婪/懒惰

所有能多次限定的正则运算符都是贪婪的。他们尽可能多地匹配目标字 符串,也就是说匹配结果会尽可能地长。不幸的是,这种做法并不总是我们想要的。因此,我们添加“懒惰”限定符来解决问题。 在各个贪婪运算符后添加“?”能让表达式只匹配尽可能短的长度。另外,修改器“U”也能惰化能多次限定的运算符。 理解贪婪与懒惰的区别是运用高级正则表达式的基础。

贪婪操作符

操作符 * 匹配之前的表达式零次或零次以上。它是 一个贪婪操作符。请看下面的例子:

preg_match( '/<h1>.*<\/h1>/', '<h1>这是一个标题。 </h1>

<h1>这是另一个。</h1>', $matches );

句点(.)能代表除换行符外的任意字符。上面 的正则表达式匹配 h1 标签以及标签内的所有内容。它用句点(.)和星号(*)来匹配标签内的所有内容。匹配结果如下:

<h1> 这是一个标题。</h1><h1>这是另一个。</h1>

整个字串都被返回。* 操作符会连续匹配所有内容 —— 甚至包括中间的 h1 闭合标签。因为它是贪婪的,匹配整个字串是符合其利益最大化原则。

懒惰操作符

把上面的式子稍作修改,加上一个问号(?),能让表达式变懒惰:

/<h1>.*?<\/h1>/

这样它会觉得,只需匹配到第一个 h1 结尾标签就完成任务了。

另一个有着类似属性的贪婪操作符是 {n,} 。它代表之前的匹配模式重复n次或n次以上,如果没有加上问号,它会寻找尽可能多的重复次数,加上的话,则会尽可能少重复(当然也就是“重复n次”最少)。

# 建立字串

$str = 'hihihi oops hi';

# 使用贪婪的{n,}操作符进行匹配

preg_match( '/(hi){2,}/', $str, $matches );  # matches[0] 将是 'hihihi'

# 使用堕化了的 {n,}? 操作符匹配

preg_match( '/(hi){2,}?/', $str, $matches );  # matches[0] 将是 'hihi'

时间: 2024-12-26 18:09:03

php正则表达式高级技巧及实例(Perl兼容)的相关文章

正则表达式高级技巧及实例详解 笨活儿_正则表达式

英文原文来自Smashing Magazine.由笨活儿翻译.转载请注明出处. 正则表达式(Regular Expression, abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息.它利用约定俗成的字符结构表达式来发生作用.不幸的是,简单的正则表达式对于一些高级运用,功能远远不够.若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式. 本文为您介绍正则表达式的高级技巧.我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法.如果你对正则的基

正则表达式高级技巧及实例详解 笨活儿

英文原文来自Smashing Magazine.由笨活儿翻译.转载请注明出处. 正则表达式(Regular Expression, abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息.它利用约定俗成的字符结构表达式来发生作用.不幸的是,简单的正则表达式对于一些高级运用,功能远远不够.若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式. 本文为您介绍正则表达式的高级技巧.我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法.如果你对正则的基

在PHP中使用与Perl兼容的正则表达式_php技巧

前言 PHP被大量的应用于Web的后台CGI开发,通常是在用户数据数据之后得出某种结果,但是如果用户输入的数据不正确,就会出现问题,比如说某人的生日是"2月30日"!那应该怎么样来检验暑假是否正确呢? 在PHP中加入了正则表达式的支持,让我们可以十分方便的进行数据匹配. 什么是正则表达式 简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具.在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言.此外,JavaScript这种客户

在PHP中使用与Perl兼容的正则表达式

前言     PHP被大量的应用于Web的后台CGI开发,通常是在用户数据数据之后得出某种结果,但是如果用户输入的数据不正确,就会出现问题,比如说某人的生日是"2月30日"!那应该怎么样来检验暑假是否正确呢? 在PHP中加入了正则表达式的支持,让我们可以十分方便的进行数据匹配. 2 什么是正则表达式:     简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具.在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言.此外,Jav

正则表达式高级技巧背后的关键概念[SM]

正则表达式(Regular Expression, abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息.它利用约定俗成的字符结构表达式来发生作用.不幸的是,简单的正则表达式对于一些高级运用,功能远远不够.若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式. 本文为您介绍正则表达式的高级技巧.我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法.如果你对正则的基本概念尚缺乏了解,请先阅读这篇文章,或者这个教程,或者维基条目. 这里的正则语法

mysql 正则表达式查询与实例

mysql教程 正则表达式查询与实例    ^ 匹配字符串的开始部分  $ 匹配字符串的结束部分  $sql ="SELECT 'fonfo' REGEXP '^fo$' from  string_find";     . 匹配任何字符(包括回车和新行)  $sql ="SELECT 'fofo' REGEXP '^f.*$' from  string_find";     a* 匹配0或多个a字符的任何序列    $sql ="SELECT 'Ban'

PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)_php技巧

本文实例讲述了PHP正则表达式基本用法.分享给大家供大家参考,具体如下: Demo1.php <?php //尝试着写第一个正则表达式 //第一个参数,表示模式(就是和字符串去比较,匹配) //第二个参数,表示字符串 //如果整个函数模式和字符串比较后匹配了,那么返回真(true)1,否则返回假(false)0 //什么叫匹配,就是一个一个的比较过去 //按照什么规则??按照模式来匹配 //只要模式全部通过,那么就通过 //匹配和相等是两个概念 //因为目前的模式是一个整体,php //所以,字

php过滤HTML标签、属性等正则表达式汇总_php实例

$str=preg_replace("/\s+/", " ", $str); //过滤多余回车 $str=preg_replace("/<[ ]+/si","<",$str); //过滤<__("<"号后面带空格)   $str=preg_replace("/<\!--.*?-->/si","",$str); //注释 $str=p

jquery常用正则表达式语法与实例

quickexpr = /^(?:[^<]*(<[ww]+>)[^>]*$|#([w-]+)$)/ (?:-)表示是一个非捕获型 [^<]表示是以"<"起始,包含0个或多个'<'括号 (<[ww]+>)表示是一个捕获型,以'<>'起始,中间包含一个或多个字符 $表示字符的结尾 (#([w-]+))表示是一个捕获型,以'#'号和字符串.数字._以及-组成 rnotwhite = /s/ s表示是空白字符以外的符号 trim