PCRE正则表达式
正则表达式是⼀个从左到右匹配⽬标字符串的模式。⼤多数字符⾃⾝就代表⼀个匹配它们⾃⾝的模式。
1.分隔符:当使⽤ PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意⾮字母数字、⾮反斜线、⾮空⽩字符。
经常使⽤的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)。下⾯的例⼦都是使⽤合法分隔符的模式。
/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%
如果分隔符需要在模式内进⾏匹配,它必须使⽤反斜线(\)进⾏转义。如果分隔符经常在模式内出现,⼀个更好的选择就是是⽤其他分隔符来提⾼可读性。
/http:\/\//
##
需要将⼀个字符串放⼊模式中使⽤时,可以⽤函数对其进⾏转义,它的第⼆个参数(可选)可以⽤于指定需要被转义的分隔符。
除了上⾯提到的分隔符,也可以使⽤括号样式的分隔符,左括号和右括号分别作为开始和结束分隔符。
{this is a pattern}
可以在结束分隔符后⾯增加。下⾯的例⼦是⼀个⼤⼩写不敏感的匹配:
#[a-z]#i
2.元字符
正则表达式的威⼒源于它可以在模式中拥有选择和重复的能⼒。⼀些字符被赋予特殊的涵义,使其不再单纯的代表⾃⼰,模式中的这种有特殊涵义的编码字符称为元字符.共有两种不同的元字符:⼀种是可以在模式中⽅括号外任何地⽅使⽤的,另外⼀种是需要在⽅括号内使⽤的。
在⽅括号外使⽤的元字符如下:
\ ⼀般⽤于转义字符
^ 断⾔⽬标的开始位置(或在多⾏模式下是⾏⾸)
$ 断⾔⽬标的结束位置(或在多⾏模式下是⾏尾)
. 匹配除换⾏符外的任何字符(默认)
[ 开始字符类定义
] 结束字符类定义
| 开始⼀个可选分⽀
( ⼦组的开始标记
) ⼦组的结束标记
? 作为量词,表⽰ 0 次或 1 次匹配。位于量词后⾯⽤于改变量词的贪婪特性。 (查阅)
* 量词,0 次或多次匹配
+ 量词,1 次或多次匹配
正则匹配中配到到带单引号{ ⾃定义量词开始标记
} ⾃定义量词结束标记
模式中⽅括号内的部分称为“字符类”。在⼀个字符类中仅有以下可⽤元字符:
\ 转义字符
^ 仅在作为第⼀个字符(⽅括号内)时,表明字符类取反
- 标记字符范围
3.转义序列(反斜线)
反斜线有多种⽤法。⾸先,如果紧接着是⼀个⾮字母数字字符,表明取消该字符所代表的特殊涵义。这种将反斜线作为转义字符的⽤法在字符类内部和外部都可⽤。
⽐如,如果你希望匹配⼀个 "*" 字符,就需要在模式中写为 "\*"。这适⽤于⼀个字符在不进⾏转义会有特殊含义的情况下。但是,对于⾮数字字母的字符,总是在需要其进⾏原⽂匹配的时候在它前⾯增加⼀个反斜线,来声明它代表⾃⼰,
这是安全的。如果要匹配⼀个反斜线,那么在模式中使⽤ ”\\”。
Note:
反斜线在单引号字符串和双引号中都有特殊含义,因此要匹配⼀个反斜线,模式中必须写为 ”\\\\”。译注: “/\\/”,⾸先它作为字符串,反斜线会进⾏转义,那么转义后的结果是/\/,这个才是正则表达式引擎拿到的模式,⽽正则表达式引擎也认为 \ 是转义标记,它会将分隔符 / 进⾏转义,从⽽得到的是⼀个错误,因此,需要 4 个反斜线才可以匹配⼀个反斜线。
4.锚
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论