一、简介
正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。
二、语法
当使用 PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意非字母数字、非反斜线、非空白字符。经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)。
合法模式示例:
/<\/\w+>/
#^[^0-9]$#
|(\d{3})-\d+|Sm ## 可以在结束分隔符后面增加模式修饰符
/^(?i)php[34]/
{^\s+(\s+)?$} ## 括号样式的分隔符,左括号和右括号分别作为 开始和结束 分隔符。
%[a-zA-Z0-9_-]%
非法模式示例:
/href='(.*)' ## 缺失结束分隔符
/\w+\s*\w+/J ## 未知模式修饰符"J"
1-\d3-\d3-\d4| ## 缺失开始分隔符
如果分隔符需要在模式内进行匹配,它必须使用反斜线进行转义。如果分隔符经常在 模式内出现, 一个更好的选择就是是用其他分隔符来提高可读性。
/http:\/\//
#http://#
三、正则表达式
由上面介绍的合法分隔符所包含的部分,就是我们主要去了解的正则表达式部分了。下面我将对一些常用的部分做一下归类:
1、 原子
原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。
包括以下内容:
> 单个字符、数字,如a-z,A-Z,0-9。
> 模式单元,如(ABC)可以理解为由多个原子组成的大的原子。
> 原子表,如 [ABC]。
> 重新使用的模式单元,如:\1
> 普通转义字符,如:\d, \D, \w
> 转义元字符,如:\*,\.
> 元字符
2、元字符
- ^ 断言目标的开始位置(或在多行模式下是行首)
- $ 断言目标的结束位置(或在多行模式下是行尾)
- . 表示任意一个除换行符之外的字符
- [] 表示单个字符的原子表
[^] 表示除中括号内原子之外的任何字符 是[]的取反
[-] 表示允许的范围,如[0-9]表示任意一位数字 - {m} 表示对前面原子的数量控制,表示是m次
{m,} 表示对前面原子的数量控制,表示是至少m次
{m,n}表示对前面原子的数量控制,表示是m到n次 - * 量词,0 次或多次匹配,等价于{0,}
- + 量词,1 次或多次匹配,等价于{1,}
- ? 作为量词,表示 0 次或 1 次匹配,等价于{0,1} 。位于量词后面用于改变量词的贪婪特性。
- () 表示一个整体原子,【还有一个子存储单元的作用】。 也可以使用
?:
来拒绝子存储。 (?: