正则表达式中常用的模式修正符有i、g、m、s、U、x、a、D、e 等。
它们之间可以组合搭配使用。
i 不区分(ignore)大小写; 例如: /abc/i 可以匹配 abc、aBC、Abc
g 全局(global)匹配 如果不带g,正则过程中字符串从左到右匹配,找到第一个符合条件的即匹配成功,返回 如果带g,则字符串从左到右,找到每个符合条件的都记录下来,知道字符串结尾位置 例如: var str = 'aaaaaaaa' var reg1 = /a/; str.match(reg1)? // 结果为:["a", index: 0, input: "aaaaaaaa"] var reg2 = /a/g; str.match(reg2)? // 结果为:["a", "a", "a", "a", "a", "a", "a", "a"]
m 多(more)行匹配 若存在换行\n并且有开始^或结束$符的情况下,和g一起使用实现全局匹配, 因为存在换行时默认会把换行符作为一个字符任务匹配字符串是个单行, g只匹配第一行,添加m之后实现多行,每个换行符之后就是开始 var str = "abcggab\nabcoab"; var preg1 = /^abc/gm; str.match(preg1)? // 结果为:["abc", "abc"] var preg2 = /ab$/gm; str.match(preg2)? // 结果为:["ab", "ab"]
s 特殊字符圆点 . 中包含换行符 默认的圆点 . 是 匹配除换行符 \n 之外的任何单字符,加上s之后, . 中包含换行符 $str = "abggab\nacbs"; $preg = "/b./s"; preg_match_all($preg, $str,$matchs); print_r($matchs);//Array ( [0] => Array ( [0] => bg [1] => b [2] => bs ) ) U 只匹配最近的一个字符串;不重复匹配; $mode="/a(.*?)c/"; $preg="/a.*c/U";//这两个正则返回相同的值 $str="abcabbbcabbbbbc" ; preg_match($mode,$str,$content); echo $content[0];//abc preg_match($preg,$str,$content); echo $content[0];//abc //修正符:x 将模式中的空白忽略; //修正符:A 强制从目标字符串开头匹配; //修正符:D 如果使用$限制结尾字符,则不允许结尾有换行; //修正符:e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;?