php正则

时间:2024-10-24 07:02:41编辑:阿星

PHP正则表达式的使用技巧

  PHP正则表达式的定义   用于描述字符排列和匹配模式的一种语法规则 它主要用于字符串的模式分割 匹配 查找及替换操作   PHP中的正则函数   PHP中有两套正则函数 两者功能差不多 分别为   一套是由PCRE(Perl Compatible Regular Expression)库提供的 使用 preg_ 为前缀命名的函数   一套由POSIX(Portable Operating System Interface of Unix )扩展提供的 使用以 ereg_ 为前缀命名的函数 (POSIX的正则函数库 自PHP 以后 就不在推荐使用 从PHP 以后 就将被移除)   由于POSIX正则即将推出历史舞台 并且PCRE和perl的形式差不多 更利于我们在perl和php之间切换 所以这里重点介绍PCRE正则的使用   PCRE正则表达式   PCRE全称为Perl Compatible Regular Expression 意思是Perl兼容正则表达式   在PCRE中 通常将模式表达式(即正则表达式)包含在两个反斜线 / 之间 如 /apple/   正则中重要的几个概念有 元字符 转义 模式单元(重复) 反义 引用和断言 这些概念都可以在文章[ ]中轻松的理解和掌握   常用的元字符(Meta character)   元字符 说明   /A 匹配字符串串首的原子   /Z 匹配字符串串尾的原子   /b 匹配单词的边界 //bis/ 匹配头为is的字符串 /is/b/ 匹配尾为is的字符串 //bis/b/ 定界   /B 匹配除单词边界之外的任意字符 //Bis/ 匹配单词 This 中的 is   /d 匹配一个数字 等价于[ ]   /D 匹配除数字以外任何一个字符 等价于[^ ]   /w 匹配一个英文字母 数字或下划线 等价于[ a zA Z_]   /W 匹配除英文字母 数字和下划线以外任何一个字符 等价于[^ a zA Z_]   /s 匹配一个空白字符 等价于[/f/t/v]   /S 匹配除空白字符以外任何一个字符 等价于[^/f/t/v]   /f 匹配一个换页符等价于 /x c 或 /cL   匹配一个换行符 等价于 /x a 或 /cJ   匹配一个回车符等价于/x d 或 /cM   /t 匹配一个制表符 等价于 /x /或/cl   /v 匹配一个垂直制表符 等价于/x b或/ck   /oNN 匹配一个八进制数字   /xNN 匹配一个十六进制数字   /cC 匹配一个控制字符   模式修正符(Pattern Modifiers)   模式修正符在忽略大小写 匹配多行中使用特别多 掌握了这一个修正符 往往能解决我们遇到的很多问题   i -可同时匹配大小写字母   M -将字符串视为多行   S -将字符串视为单行 换行符做普通字符看待 使 匹配任何字符   X -模式中的空白忽略不计   U -匹配到最近的字符串   e -将替换的字符串作为表达使用   格式 /apple/i匹配 apple 或 Apple 等 忽略大小写 /i   PCRE的模式单元   // 提取第一位的属性   /^/d{ } ([/W])/d{ }// /d{ }$匹配 / / 等字符串 但上述正则表达式不匹配 / 的格式 这是因为模式 [/W] 的结果 / 已经被存储 下个位置 / 引用时 其匹配模式也是字符 /   当不需要存储匹配结果时使用非存储模式单元 (? )   例如/(?:a|b|c)(D|E|F)// g/ 将匹配 aEEg 在一些正则表达式中 使用非存储模式单元是必要的 否则 需要改变其后引用的顺序 上例还可以写成/(a|b|c)(C|E|F)/ g/   PCRE正则表达式函数   以下为引用的内容   preg_match()和preg_match_all() preg_quote() preg_split() preg_grep() preg_replace()   函数的具体使用 我们可以通过PHP手册来找到 下面分享一些平时积累的正则表达式   匹配action属性   以下为引用的内容   $str = ; $match = ; preg_match_all( //s+action=/ (?!)( *?)/ /s/ $str $match); print_r($match);   在正则中使用回调函数   以下为引用的内容   /** * replace some string by callback function * */ function callback_replace() { $url = ; $str = ; $str = preg_replace ( /(?<=/saction=/ )(?!)( *?)(?=/ /s)/e search(/$url // ) $str ); echo $str; } function search($url $match){ return $url / $match; }   带断言的正则匹配   以下为引用的内容   $match = ; $str = xxxxxx cn bold font paragraph text    ; preg_match_all ( /(?) *(?=)/ $str $match ); echo 匹配没有属性的HTML标签中的内容 ; print_r ( $match );   替换HTML源码中的地址   以下为引用的内容   $form_ = preg_replace ( /(?<=/saction=/ |/ssrc=/ |/s)(?!|javascript)( *?)(?=/ /s)/e add_url(/$url / // / ) $form_ ); lishixinzhi/Article/program/PHP/201311/21027


PHP 正则表达式总结

PHP 正则表达式总结    1.PHP中两个常用的正则函数   a.preg_match 正则函数,以perl语言为基础   语法:preg_match( mode,string subject,array matches)   说明:mode参数---- 正则的模块,也就是正则表达式(语法)   subject参数---- 正则的内容   matches参数---- 正则的结果(获得一个数组的形式)   b.ereg 正则函数,以POSIX基础(Unix、Script)   语法:ereg(mode ,string subject, array regs)    2.正则表达式中包括的元素   a.原子(普通字符:a-z A-Z 0-9 、原子表、转义字符)   b.元字符(有特殊功能的字符,如:# 、*)   c.模式修正符(系统内置部分字符 i、m、S、U ...)    3.正则表达式中的“原子”   a.a-z A-Z _ 0-9 //最常见的字符   b.(abc)(skd) //用圆括号包含起来的单元符号(一个整体)   c.[abcs][^abd] //用方括号包含的原子表,原子表中的^代表排除或相反的内容   d.转义字符   d 包含所有的数字[0-9]   D 除所有数字外[^0-9]   w 包含所有英文字符[a-z A-Z 0-9]   W 除所有英文字符外[^a-z A-Z 0-9]   s 回车,换行等   ......   注明: 圆括号 必须是整体才能匹配; 方括号 只要是其子集,都可以匹配(内容存在)    4.正则表达式元字符   * 匹配前一个内容的0次1次或多次   . 匹配内容的0次1次或多次,但不包含回车换行(代指自己,任何内容)   + 匹配前一个内容的1次或多次   ? 匹配前一个内容的.0次或1次   | 选择匹配类似PHP中的| (因为这个运算符合是弱类型导致前面最为整体匹配,类似一个单词匹配)   ^ 匹配字符串首部内容   $ 匹配字符串尾部内容   b 匹配单词边界,边界可以是空格或者特殊符合(有单词分界符,类似空格)   B 匹配除带单词边界意外内容(无单词分界符)   {m} 匹配前一个内容的重复次数为M次   {m,} 匹配前一个内容的重复次数大于等于M次   {m,n} 匹配前一个内容的重复次数M次到N次   ( ) 合并整体匹配,并放入内存,可使用1 2…依次获取 (调用放入内存中的内容)    5.运算顺序   依然遵循从左到→右的运算规则   优先级:   ( ) 圆括号因为是内存处理所以最高   * ? + { } 重复匹配内容其次   ^ $ b 边界处理第三   | 条件处理第四   最后按照运算顺序计算匹配    6.模式修正符   模式修正符是为正则表达式增强和补充的一个功能,使用在正则之外 例如:/ 正则 / U   常用修正符:   i 正则内容在匹配时候不区分大小写(默认是区分的)   m 在匹配首内容或者尾内容时候采用多行识别匹配   s 将转义回车取消是为单行匹配如. 匹配的时候   x 忽略正则中的空白   A 强制从头开始匹配   D 强制$匹配尾部无任何内容 n   U 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束, 常用在采集程序上的正则表达式    7.匹配功能   preg_match_all 全部匹配函数   语法:preg_match_all ( string pattern, string subject, array matches [, int flags] )   说明:对结果排序使 $matches[0] 为全部模式匹配的数   用途:截取比较详细的内容,采集网页,分析文本    8.替换功能   preg_replace 正则替换函数   语法:preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )   说明:通过正则表达式来替换相关内容,类似之前学过的str_replace字符串替换,但 功能要强于它   提示:1、替换内容可以是一个正则也可以是数组正则   2、替换内容可以通过修正符e来解决替换执行内容   用途:替换一些比较复杂的内容上,也可以用于内容的转换上    9.分割功能   preg_split 正则切割   语法:preg_split ( string pattern, string subject [, int limit [, int flags]] )   说明:通过正则表达式来切割相关内容,类似之前学过的explode切割函数,但explode 只能按照一种方式切割有局限性。 ;


上一篇:照片二三事

下一篇:没有了