2013-12-13 1 views
1

Учитывая следующий код:Stop регулярное выражение Расщепление подобранная 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); 

Теперь результирующий массив будет иметь 3 элемента в массиве вместо 4.

Помимо удаления дополнительной группировки Я также упрощен ваше регулярное выражение также, поскольку большинству специальных символов не нужно чтобы избежать экранирования внутри класса символов.