正则表达式学习笔记

分隔符

1) 使用PCRE函数时,正则表达式需由分隔符包裹。分隔符可以使用任意非字母数字,非反斜线,非空白字符。

2) 常使用的分隔符:/pattern/,#pattern#,+pattern+,{pattern}[当分隔符经常在pattern内出现时可以使用其他分隔符来提高可读性]

3) 分隔符在模式内进行匹配时,使用反斜线进行转义

正则字符

.    匹配不包括换行的任意字符

  在php的s修饰符[单行模式]可以匹配换行,如$pattern=/<div>(.*?)</div>/s可以匹配div中多行数据[此处的?表示非贪婪匹配]

\s   : 空格、tab、换行

  [\s\S]可以匹配包含换行的任意字符

 :  表示匹配0~n个

+  :  表示匹配1~n个

\   :  转义,一个特殊字符前加\表示转义为普通字符,eg:[ , ] , - , \ , ^

[ ]  :  单字符数据多选一

  [abc]=>a Or b Or c

  [^abc]=>Not a && Not b && Not c

  [0-9a-zA-Z]=>字符取值范围

^   :  开始或排除

  ^www=>字符串开始

  [^abc]=>排除

$  :  字符串结束

{n,m}  :  循环次数,最少匹配n次,最多匹配m次

  [0-9]{1,3}=>在0-9范围内循环1 Or 2 Or 3次

  [0-9]{3}=>循环指定次数,{3,3}简写成{3}

  \{1}=>表示匹配字符"{1}",匹配字符“{number}”情况下需要转义

?  :  

  1) 表示匹配一个或零个,eg:https?=>https Or http

  2) 表示非贪婪模式:尽可能少的匹配

 :  多字符数据里的多选一

  http abc ftp abc svn abc

  http|ftp|svn abc=>http,ftp,svn abc

  (http|ftp|svn)=>http abc,ftp abc,svn abc

( )  :  数据分界[多字符数据多选一]和取数据[子模式]

  Tip:使用子模式过程中,常见写法

    \1=>在正则表达式本身中引用分组1的内容

    $1=>在替换中调用分组内容

(?:)  :  非捕获组

  (?:http|ftp|svn)://([^/]+)=>(?:左括号排除计数 

模式修饰符

 i   :  不区分大小写

 s   :  作用主要是使.能够匹配换行

测试字符串:abcABC

/((?i)[A-Z]+)c/=>res:abc

/([A-Z]+)c/i=>res:abcABC

PCRE函数

preg_replace($pattern,$replacement,$subject):

@param $pattern:搜索模式,字符串或字符串数组

@param $replacement:用于替换的字符串或字符串数组

@param $subject:字符串或字符串数组

@return 字符串或字符串数组(取决于$subject)

preg_match_all($pattern,$subject[,$matches]):

执行一个全局正则表达式匹配(在找到第一个匹配后,子序列继续从最后一次匹配位置搜索)

@param $pattern : 字符串形式的正则表达式

@param $subject : 待搜索的输入字符串

@param $matches : 作为输出参数输出所有的匹配结果

参考博文:https://www.cnblogs.com/Zjmainstay/p/deep-regexp.html[博主:Zjmainstay]

参考书籍:正则表达式必知必会[美Ben Forta著]

posted @ 2017-11-25 21:40  skye_gu  阅读(129)  评论(0编辑  收藏  举报