分隔符
1) 使用PCRE函数时,正则表达式需由分隔符包裹。分隔符可以使用任意非字母数字,非反斜线,非空白字符。
2) 常使用的分隔符:/pattern/,#pattern#,+pattern+,{pattern}[当分隔符经常在pattern内出现时可以使用其他分隔符来提高可读性]
3) 分隔符在模式内进行匹配时,使用反斜线进行转义
正则字符
. : 匹配不包括换行的任意字符
在php的s修饰符[单行模式]可以匹配换行,如$pattern=/<div>(.*?)</div>/s可以匹配div中多行数据[此处的?表示非贪婪匹配]
s : 空格、tab、换行
[sS]可以匹配包含换行的任意字符
* : 表示匹配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著]