2011-10-20 59 views
0

我試圖從一些文本匹配一些鏈接:的preg_match不工作

$reg = '#ok is it http://google.com/?s=us#'; 
$page = 'Well i think ! ok is it http://google.com/?s=us&ui=pl0 anyways it ok'; 

if(preg_match($reg,$page)){ 
    echo 'it work'; 
}else{ 
    echo 'not work'; 
} 

現在的問題是,如果我使用$reg = '#ok is it http://google.com/ ';那麼它的確定,但是當我使用一個與它不「=?」。

好的!我明白有語法錯誤的一些問題是否有任何功能或現成的功能,它會自動轉義這些特殊字符?

回答

3

您有很多語法錯誤。你必須逃避所有的特殊字符作爲'。','?'等等。因此,你必須更換字符是這樣的:

'.' -> '\.' 
'?' -> '\?' 
... 

無論如何,正則表達式應該是這樣的:

$reg = '#ok is it http:\/\/google\.com/\?s=us#'; 
+0

好吧,'.'仍然會匹配一個字面的'.'(實際上其他任何東西),但是'?'當然需要轉義:D –

0

用途:

$reg = '#ok is it http://google.com/\?s=us#'; 
0

某些字符改爲由元字符REGEX引擎,這意味着它們在引擎的程序中有一個特殊的功能,幾個例子是? (問號),\(斜線),。 (期間),*(星號)等。

就像使用包含元字符的SQL發送字符串一樣,您需要通過添加尾部斜線手動轉義這些字符:\。當轉義\字符時,您可能需要像這樣轉義它三次或四次:\\\或\\\\。