去網上連搜帶刮,終於給理解了大概~\(≧▽≦)/~啦啦啦
<?php//preg_match()//int preg_match ( string pattern, string subject [, array matches [, int flags]] )//在 subject 字串中搜尋與 pattern 給出的Regex相匹配的內容。 //如果提供了 matches,則其會被搜尋的結果所填充。$matches[0] 將包含與整個模式比對的文本,$matches[1] 將包含與第一個捕獲的括弧中的子模式所匹配的文本,以此類推。//preg_match() 返回 pattern 所匹配的次數。要麼是 0 次(沒有匹配)或 1 次,因為 preg_match() 在第一次匹配之後將停止搜尋。preg_match_all() 則相反,會一直搜尋到 subject 的結尾處。如果出錯 preg_match() 返回 FALSE。 ////preg_match_all()//int preg_match_all ( string pattern, string subject, array matches [, int flags] )//在 subject 中搜尋所有與 pattern 給出的Regex匹配的內容並將結果以 flags 指定的順序放到 matches 中。 //搜尋到第一個匹配項之後,接下來的搜尋從上一個匹配項末尾開始。 //mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )//在 subject 中搜尋 pattern 模式的匹配項並替換為 replacement。如果指定了 limit,則僅替換 limit 個匹配,如果省略 limit 或者其值為 -1,則所有的匹配項都會被替換。 //replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首選使用後者。每個此種引用將被替換為與第 n 個被捕獲的括弧內的子模式所匹配的文本。n 可以從 0 到 99,其中 \\0 或 $0 指的是被整個模式所匹配的文本。對左圓括弧從左至右計數(從 1 開始)以取得子模式的數目。 //對替換模式在一個逆向引用後面緊接著一個數字時(即:緊接在一個匹配的模式後面的數字),不能使用熟悉的 \\1 符號來表示逆向引用。舉例說 \\11,將會使 preg_replace() 搞不清楚是想要一個 \\1 的逆向引用後面跟著一個數字 1 還是一個 \\11 的逆向引用。本例中的解決方案是使用 \${1}1。這會形成一個隔離的 $1 逆向引用,而使另一個 1 只是單純的文字。 //1.進行字串的尋找的替換 $str = "daoyu shi ge hao hai zi 5555"; $pattern = "/\s/"; //如果將變數定義為$pattern_1會出錯 $str = preg_replace($pattern,'-',$str); echo $str."<br>";//daoyu-shi-ge-hao-hai-zi-5555//2.對字串的逆向引用//方法一 $pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i"; $str =preg_replace($pat,"\$1",$str); echo $str."<br>";//注意:如果是下面這種形式你會發現匹配的是:zi- 所以可以這樣認為在有次數的{6}的情況下,他($1)匹配的是最後一次 $str='daoyu-shi-ge-hao-hai-zi-5555'; $pat = "/((\w+)-){6}(\d+)/i"; $str =preg_replace($pat,"\$1",$str); echo $str."<br>";//方法二 $str = "daoyu-shi-ge-hao-hai-zi-5555"; $pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i"; $str =preg_replace($pat,"\\1",$str); echo $str."<br>";//注意:當正則寫成$pat= "/((\w+)-){6}(\d+)/i";時和上面的情況一樣//3 當參數是數組的情況(用下手冊的例子) $string = "The quick brown fox jumped over the lazy dog."; $patterns[0] = "/quick/"; $patterns[1] = "/brown/"; $patterns[2] = "/fox/"; $replacements[2] = "bear"; $replacements[1] = "black"; $replacements[0] = "slow"; print preg_replace($patterns, $replacements, $string)."<br>";//或許你已經發現了,他是按“將以其鍵名在數組中出現的順序來進行處理。這不一定和索引的數字順序相同”按我的理解就是在按“寫”的順序而這並不一定是//索引的順序(書冊上還有還有ksort()後的例子,時間關係就不說了,有興趣的兄弟可以自己找著看下)//如果 subject 是個數組,則會對 subject 中的每個項目執行搜尋和替換,並返回一個數組。//如果 pattern 和 replacement 都是數組,則 preg_replace() 會依次從中分別取出值來對 subject 進行搜尋和替換。如果 replacement 中的值比 pattern 中的少,則用Null 字元串作為餘下的替換值。如果 pattern 是數組而 replacement 是字串,則對 pattern 中的每個值都用此字串作為替換值。反過來則沒有意義了。//preg_split//array preg_split ( string pattern, string subject [, int limit [, int flags]] )//返回一個數組,包含 subject 中沿著與 pattern 匹配的邊界所分割的子串。 //如果指定了 limit,則最多返回 limit 個子串,如果 limit 是 -1,則意味著沒有限制$seek = array();$text = "I have a dream that one day I can make it. So just do it, nothing is impossible!";//將字串按空白,標點符號拆分(每個標點後也可能跟有空格)$words = preg_split("/[.,;!\s']\s*/", $text);foreach($words as $val){$seek[strtolower($val)] ++;}echo "共有大約" .count($words). "個單詞。";echo "其中共有" .$seek['i']. "個單詞“I”。";?>