學php正則!超基礎簡單例子_Regex

來源:互聯網
上載者:User
問題是這樣的,某個情況下要給:http://jb51.net?a=1

這類url地址追加參數變為:http://jb51.net?a=1&b=2

但是怎麼知道已經存在相同參數名呢,例如有這種情況:http://jb51.net?a=1&a=2

這個雖然不會有什麼大錯誤,但是地址欄這樣看起來很不好。那怎麼辦呢?用正則解決吧(本來我想用php的字串處理解決的,但是後來覺得要學一下正則了就用正則做吧)

以下是我用於返回上一頁的幕後處理方法

複製代碼 代碼如下:

function _goBack($msg=null,$get=array()) {
$url = $_SESSION['BACKURL'];
if($get!=array())
foreach ($get as $k=>$g){
$url.='&'.$k.'='.$g;//先追加所有要追加的參數,不管是否重複
if(count(explode("&{$k}=",$url))>2){//假如以"&a="這種格式分割目前url字串發現有超過兩個的分割數組,即表明該字串有重複參數
$url=preg_replace("/{$k}=[a-zA-Z0-9]*&/",'',$url);//正則替換所有"&a=x"為空白
}
}
unset($_SESSION['BACKURL']);
$this->alert($msg,$url);
}

簡單的解釋:
“/{$k}=[a-zA-Z0-9]*&/”假如我們假設$k=”a”,即”/a=[a-zA-Z0-9]*&/”

不知道有沒理解錯,這個意思其實是匹配以"a="開頭,緊跟任一數字字母組合([a-zA-Z0-9]*:意思是任意單個數字或者字母字元,可以把*理解為對前面那個任一字元的重複,如u*可以理解為:uuuu.....,不限制個數的u排列,這裡的*可以用{0,}代替),再緊跟"&"。

這是個很簡單的例子,但是看網上的關於正則文法的描述,總感覺看不明白,不知道是我理解能力問題還是寫得人說得太深奧。

另外解釋一下,為什麼這樣就可以去除重複,原理很簡單,http://jb51.net?a=1&a=2被替換”&a=x”格式字元的時候最後一個正好不會被刪除,要知道我們迴圈中每次我們都是把新參數放在最後面的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.