组成
PHP中一个正则表达式分三个部分:分隔符,表达式,修饰符
原子字符
.
匹配除换行符以外的任意字符
\w
匹配一个字母或数字或下划线
\s
匹配一个空白符
\d
匹配一个数字
\b
匹配单词的开始或结束的位置(匹配一个位置)
^
匹配字符串的开始
$
匹配字符串的结束
-
表示范围
[]
匹配括号中的任意一个字符
量词
*
重复0次或更多次
+
重复1次或更多次
?
重复0次或1次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复n到m次
反义
\W
\w
取反
\S
\s
取反
\D
\d
取反
\B
\b
取反
[^x]
匹配除了x以为的任意一个字符
[^abcde]
匹配除了abcde以为的任意一个字符
分支
|
表示分支,在[]
中无效,匹配分支条件时,从左往右匹配,当匹配到某个分支时结束,不会再考虑后面的分支
分组
捕获
(exp)
匹配exp
,并捕获文本到自动命名的组里
(?<name>exp)
匹配exp
,并捕获文本到名为name
的组里
(?:exp)
匹配exp
,不捕获匹配的文本,也不给此分组分配组号零宽断言
(?=exp)
匹配exp
前面的位置
(?<=exp)
匹配exp
后面的位置
(?!exp)
匹配后面跟的不是exp
的位置
(?<!exp)
匹配前面不是exp
的位置注释
(?#comment)
提供注释辅助阅读,不对正则产生任何影响
反向引用
\1
引用第一个分组子匹配
\n
引用第n
个分组子匹配
\k<name>
引用命名为name
的分组子匹配
懒惰模式
*?
任意次
+?
一次或多次
??
0次或1次
{m,n}?
m-n
之间
{m,}?
至少m
常用正则
/^\d+$/
非负整数
/^[1-9]+[0-9]*$/
正整数
/^-\d+$|0/
非正整数
/^-[1-9]+[0-9]*$/
负整数
/^[\w-.]+@[\w-.]+(\.[\w-]+)+$/
email地址
<(.*)>.*<\/\1>|<.* \/>
html标签
<[img|IMG].*?src=[\'|\"](.*?(?:\.gif|\.jpg))[\'|\"].*?[\/]?>
提取img标签的src值