1. 程式人生 > >正則表示式修飾符 i、g、m、s、U、x、a、D、e

正則表示式修飾符 i、g、m、s、U、x、a、D、e

正則表示式中常用的模式修正符有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()使用, 可以把匹配來的字串當作正則表示式執行;  

以上轉自 https://www.cnblogs.com/kevin-yuan/archive/2012/09/25/2702167.html