關於preg_match 和preg_match_all 函式結果的說明
php**為:
<?php
$str = "sdh111-757-111fkjhgjkiu888-060-888ygndfhdsuifyiud";
$reg = '/(\d)\1-(\d)\d\2-\1/i';
//preg_match($reg,$str,$res);
preg_match_all($reg,$str,$res);
var_dump($res);
?>
preg_match結果為:
array
[0] => 111-575-111
[1] => 1
[2] => 5
如果使用的是preg_match函式,匹配的結果是,只匹配乙個結果
$res[0] 就是匹配到的內容
$reg[1] 就是第乙個子表示式的內容
$reg[n] 就是第n個子表示式的內容
preg_match_all結果為
1:子表示式
就是在正規表示式中()裡面的表示式,這些括號中的表示式匹配到的元素,會**獲到記憶體中,就是上面preg_match和preg_match匹配的陣列中除第乙個以外的陣列部分。
2:捕獲 (請注意,如果你的正規表示式中有子表示式,則,正規表示式使用單引號括起來)
3:反向引用
上面的例子中的這個正規表示式:
$reg = '/(\d)\1-(\d)\d\2-\1/i';
這個正規表示式中就用到了反向引用,其中 \1 \2 都是反向引用,代表的是第乙個、第二個子表示式匹配到的內容。
特殊的說明:
在正則規範中,我們可能會 看到 (?: pattern) (?! patter) (?(?: pattern) 非捕獲匹配
這些特殊的表示式是正則中的 環視 有興趣可以網上搜尋學習。
表示式 說明
(?<=pattern) 逆序肯定環視,表示所在位置左側能夠匹配expression
(?(?=pattern) 順序肯定環視,表示所在位置右側能夠匹配expression
(?!pattern) 順序否定環視,表示所在位置右側不能匹配expression
參考說明文件:
(?:pattern) 匹配 pattern 但不獲取匹配結果,也就是說這是乙個非獲取匹配,不進行儲存供以後使用。這在使用 "或" 字元 (|) 來組合乙個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是乙個比 'industry|industries' 更簡略的表示式。
(?!pattern) 負向預查,在任何不匹配 pattern 的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如'windows (?!95|98|nt|2000)' 能匹配 "windows 3.1" 中的 "windows",但不能匹配 "windows 2000" 中的 "windows"。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始
筆記 QT正規表示式要注意的東西
可能是轉義字元再次轉義的問題,也有可能是qstring再次使用會自己新增一對雙引號的問題,反正這樣用就沒問題了。qstring global operator decode nodes qstring node text qregexp vap pattern 同樣的東西輸出也不一樣,這樣子輸出沒有...
正規表示式的注意點
先說遇到的問題,const numberregexp d g const isnumber v numberregexp.test v isnumber 22 true isnumber 22 false驚呆了,不是同乙個正則嗎?怎麼可能啊?全域性匹配 g 上面的問題就是使用了全域性匹配,帶來的影響...
正規表示式中有關 b 的幾點注意事項
正規表示式中的 b可以用來單詞的邊界。單詞的前邊界,或者是後邊界,或者是同時。基礎用法略去不提,在 b的使用中有這樣幾點是需要格外注意的。像 b mentioned 這樣的表達是無法匹配出 mentioned 這樣的字串的。所以請不要嘗試在提取出的微博的文字中使用 b b 這樣的方式提取被 的使用者...