2013-12-13 53 views
1

鑑於以下代碼:停止正則表達式分裂匹配URL以使preg_split

$regex = '/(http\:\/\/|https\:\/\/)([a-z0-9-\.\/\?\=\+_]*)/i'; 
$text = preg_split($regex, $note, -1, PREG_SPLIT_DELIM_CAPTURE); 

其返回一個數組,例如:

array (size=4) 
    0 => string '...' (length=X) 
    1 => string 'https://' (length=8) 
    2 => string 'duckduckgo.com/?q=how+much+wood+could+a+wood-chuck+chuck+if+a+wood-chuck+could+chuck+wood' (length=89) 
    3 => string '...' (length=X) 

我寧願它如果返回的數組具有尺寸= 3,只有一個URL。這可能嗎?

+0

我認爲我的正則表達式應該導致兩部分,協議和域。我想要一個返回完整URL的正則表達式。 –

回答

3

當然可以做到,只需從正則表達式中刪除那些額外的匹配組。試試下面的代碼:

$regex = '#(https?://[a-z0-9.?=+_-]*)#i'; 
$text = preg_split($regex, $note, -1, PREG_SPLIT_DELIM_CAPTURE); 

現在導致陣列將有數組,而不是4

在3個要素此外,除去多餘的分組我還簡化您的正則表達式也因爲大多數的特殊字符不需要在角色類內部逃脫。