正则表达式简单总结

来源:互联网 发布:php视频采集 编辑:程序博客网 时间:2024/06/16 00:50

PHP中的正则表达式分为三部分:分隔符,表达式,修饰符

分隔符:除了字母、数字、反斜线和空白字符以外的任意字符,经常使用的分隔符是斜线(/)、hash符号(#)、取反符号(~)

表达式:由一些特殊字符和非特殊的字符串组成

修饰符:用于开启或关闭某种功能

元字符

“.”匹配除换行符以外的任意字符
“\b”代表单词的开头或结尾
“\w”匹配字母、数字、下划线或汉字
“\s”匹配任意空白符
“\d”匹配任意数字
“^”匹配字符串的开始
“$”匹配字符串的结束
“-“表述范围
“[]”匹配括号中的任意一个字符
*(任意次)、?(0或1次)、+(至少一次)表示要匹配的数量
使用反斜线来转义,也可以使用\Q、\E来忽略元字符

<?php$a = "12332+";preg_match_all('/[\d+]/',$a,$arr);print_r($arr);//Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 3 [4] => 2 [5] => + ) )

反义

“\B” 匹配不是单词的开头或结尾
“\W”匹配不是字母、数字、下划线或汉字
“\S”匹配任意不是空白符的字符
“\D”匹配任意非数字字符
“[^x]”匹配除了x的任意字符
“[^xyz]”匹配除了xyz的任意字符

分支

(c|h|f|to)at
分支用”|”分隔开
\d{5}-\d{4}|\d{5} 如果满足某个分支条件,就不考虑其他条件了

分组

重复单个字符可以在字符后加上限定符,当多个字符重复时可以用小括号指定子表达式,然后规定子表达式重复的次数

捕获
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里
(?:exp) 匹配exp,不捕获匹配文本

ip的正则表达式

(((25[0-5]|2[0-4]\d|1\d{2})|[1-9]\d|\d)\.){3}((25[0-5]|2[0-4]\d|1\d{2})|[1-9]\d|\d)

反向引用

反向引用用于重复搜索前面某个分组匹配的文本
(\”|’).*?(\”|’)可能会出现匹配到的内容单引号或双引号无法成对出现
(\”|’).*?\1

环视

断言用来表明一个应该为真的事实。
正则表达式中,只有断言为真才会继续进行匹配。
断言用来匹配一个事实而不是内容

零宽断言
(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面不是exp的位置
(?< !exp)匹配前面不是exp的位置
(?#comment)注释,不对正则表达式产生任何影响

$b = '1334 2332 3675 4445 5678';preg_match_all('#(?<=\s)\d+(?=\s)#',$b,$arr);print_r($arr);//Array ( [0] => Array ( [0] => 2332 [1] => 3675 [2] => 4445 ) )
$b = 'rest model result ';preg_match_all('#(?!r)\w+(?<!t)#',$b,$arr);print_r($arr);//Array ( [0] => Array ( [0] => es [1] => model [2] => esul ) )

贪婪/懒惰模式
*?、+?、 ??、 [n,m]?、 [n,]?,加”?”关闭贪婪模式

运算符优先级

优先级从上到下,由高到低
\ 转义
(),(?:),(?=),[] 括号和中括号
*,+,?,{n},{n,},{n,m} 限定符
^,$ 定位符
| 替换

常用模式

1.忽略大小写(i)
2.多行模式(m)
如果使用这个模式^和$就是行的开始和结束处,否则将整个输入视作一个字符串,忽略换行符
m代表多行匹配,而非跨行匹配。当表达式中出现^、$中至少一个元字符且字符串有换行符”\n”时,m修饰符才起作用,负责被忽略。
3.点号通配模式(s)
使点号可以匹配换行符
4.懒惰模式(U)
5.结尾限制(D)
如果使用$限制结尾字符,则不允许出现结尾有换行

原创粉丝点击