老莫的笔记本  
  
查看: 941|回复: 0

PHP正则表达式

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-7-22 14:59:52 | 显示全部楼层 |阅读模式
PHP中是用 PCRE库函数进行正则匹配格式:  preg_match('正则',字符串);参考文献:http://www.cnblogs.com/hellohell/p/5718319.html


PCRE 库函数中,正则匹配模式使用分隔符与元字符组成,分隔符可以是非数字、非反斜线,非空格的任意字符,经常使用的分隔符是正斜线(/)、hash符号(#),以及取反符号( ~ ).
2.1如果模式中包分隔符,则分隔符需要使用反斜线( \ )进行转译。
     例如:   /http:\/\//   ;

2.2 若含较多的分割字符,最好更换其他的字符作为分隔符,也可以使用preg_quote转义;
     例如: $p = 'http://' ;      $p = '/'.preg_quote($p,'/').'/' ;        echo $p;

2.3分隔符后面可以使用模式修饰符,模式修饰符包括: i,m,s,x等 ,例如使用 i 修饰符忽略大小写匹配,例: if(preg_match('/http/:' ,$str)){-----};
  i ----- 不区分大小写;
g------ 表示全局匹配;
  m ---- 将字符串视为多行,不管哪行都可以匹配;
  s ----- 将字符串视为单行,换行符作为普通字符;
  x ----  将模式中的空白忽略;
  A ---- 强制从目标字符串开头匹配;
  D----- 如果使用$限制结尾字符串,不允许结尾有换行;
  U ---- 只匹配最近的一个字符串;不重复匹配;
  e ---- 配合函数pre_replace() 使用,可以把匹配来的字符串当做正则表达式执行;

元字符与转义
定义: 正则表达式中具有特殊含义的字符称之为元字符。
  \ ---------- 一般用于转义字符
^ ---------- 断言目标的开始位置。(多行模式下是行首)
$ ---------- 断言目标的结束位置。(多行模式下是行尾)
  . -----------匹配除换行外的任何字符(默认)
[ ---------- 开始字符类定义
] ---------- 结束字符类定义
| ---------- 开始一个可选分支
(---------- 子组的开始标记
)---------- 子组的结束标记
?--------- 作为量词,表示0次或1次匹配,位于量词的后面用于改变量词的贪婪特性
*---------- 量词。 0次或者多次匹配
+--------- 量词。1次或多次匹配
{---------- 自定义量词开始标记
}---------- 自定义量词结束标记

注:元字符使用场景,1.任何地方 ; 2.方括号内
      ^ 仅作为第一个字符【方括号】时,表明字符类取反。
      -  标记字符范围;

如果提供的参数matches, 它将被填充为搜索结果。
    $matches[0] 将包含完整模式匹配到的文本,
    $matches[1] 将包含第一个捕获子组匹配到的文本。

贪婪模式与懒惰模式。
定义:当使用 + 之后将会变得贪婪,它将匹配尽可能多的字符。
          当使用 ? 之后它将尽可能少的匹配,就是懒惰模式。
贪婪模式: 在匹配与不可匹配的时候,优先匹配。
懒惰模式: 在匹配与不可匹配的时候,优先不匹配。
注:当我们确切的知道所匹配的字符长度时,可以用{}指定匹配字符。

preg_match 用来执行一个匹配,可以简单的用来判断模式是否成功或者取得一个匹配结果,他的返回值是匹配成功的次数 0 或者 1 ,在匹配到1次就会停止搜索。

preg_match  只能匹配一次结果;
preg_match_all  可以循环获取一个列表的匹配结果数组 ;


正则的搜索和替换           //preg_replace(正则,替换值,字符)
例 :     $str = 'one    two' ;        
          $str = preg_replace('/\s+/'' ',$str) ;
          echo = $str          // 结果 'one two'













回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表