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) 如果使用$限制结尾字符,则不允许出现结尾有换行