Как сопоставить голые URL с регулярным выражением в PHP? - PullRequest
1 голос
/ 25 сентября 2010
$bits = preg_split('#((?:https?|ftp)://[^\s\'"<>()]+)#S', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);

Скажем, я пытаюсь сопоставить URL-адреса, которые необходимо связать. Вышеуказанное слишком допустимо.

Я хочу сопоставлять только простые URL-адреса, такие как http://google.com, но не <a href="http://google.com">http://google.com</a>или <iframe src="http://google.com"></iframe>

Ответы [ 4 ]

2 голосов
/ 25 сентября 2010

Похоже, вы пытаетесь проанализировать HTML с помощью регулярных выражений. Возможно, вы захотите переосмыслить это.

0 голосов
/ 25 сентября 2010

Более эффективный RE

[hf]t{1,2}p:\/\/[a-zA-Z0-9\.\-]*

Результат

Array
(
    [0] => Array
        (
            [0] => ftp://article-stack.com
            [1] => http://google.com
        )
)
0 голосов
/ 25 сентября 2010

RE

http:\/\/[a-zA-Z0-9\.\-]*

Результат

Array
(
    [0] => http://google.com
)
0 голосов
/ 25 сентября 2010

попробуйте это ...

function validUrl($url){
        $return=FALSE;
        $matches=FALSE;
        $regex='#(^';                  #match[1]
        $regex.='((https?|ftps?)+://)?'; #Scheme match[2]
        $regex.='(([0-9a-z-]+\.)+'; #Domain match[5] complete match[4]
        $regex.='([a-z]{2,3}|aero|coop|jobs|mobi|museum|name|travel))'; #TLD match[6]
        $regex.='(:[0-9]{1,5})?'; #Port match[7]
        $regex.='(\/[^ ]*)?'; #Query match[8]
        $regex.='$)#i';
        if( preg_match($regex,$url,$matches) ){
            $return=$matches[0]; $domain=$matches[4];
            if(!gethostbyname($domain)){ 
                $return = FALSE;
            }
        }
        if($return==FALSE){
            return FALSE;
        }
        else{
            return $matches;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...