2012-01-30 58 views
1

我正在尋找一種方式寫在只有一個preg_replace簡單的regex不

$url = "stackoverflow"; 
    if(!preg_match('/apple/',$url)){ 
    $url = $url.".apple.com"; 
    } 
+0

你想完成什麼?你想要像「stackoverflow.com.apple.com」這樣的網址嗎? – 2012-01-30 22:19:27

+0

讓我們說沒有TLD的url =「stackoverflow」 – ThomasReggi 2012-01-30 22:20:06

+0

Err你的問題沒有意義。字符串是否總是以蘋果結尾?如果沒有,那麼你不能使用正則表達式追加到一個字符串。 – CBusBus 2012-01-30 22:21:07

回答

3
$str = 'something'; 
echo preg_replace('/^(?:(?!apple).)*$/is', '$0.apple.com', $str); 

PS如下:修飾符is可能是有用的。

(?:)*使得非捕獲模式。它匹配零個或多個(?!apple)的實例。當模式匹配時,除apple$0之外的任何東西都告訴取整串。上述示例並不相同,因爲當字符串不以apple開頭時,它會匹配任何內容,因爲?!apple條件僅在字符串的開始處應用一次。

+0

可以放在'(。)*'括號之外(因爲匹配被錨定),防止不必要的字符串掃描:''/ ^(?! apple)。* $/i'。 – 2012-01-30 22:52:49

+0

@ mathematical.coffee嘗試你的正則表達式 - 它不會按要求工作 – Cheery 2012-01-30 22:54:21

+0

+1提供被動羣組的簡短解釋? – Josh 2012-01-30 22:58:32