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 只能按照一种方式切割有局限性。 ;