2011-10-15 2 views
0
http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567 
http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567%2Fsubtitle 
http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F123456 
http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F123456%2Fsubtitle 
http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567%2F 
http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F123456%2F 

URL-адрес всегда начинаются с:Получение ID из URL с помощью регулярных выражений

http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F 

Идентификаторы всегда числовыми, однако количество цифр может меняться.

Как получить идентификатор (1234567 и 123456) с вышеуказанных URL-адресов?

Я попытался с помощью следующей схемы без удачи (он не возвращает никаких совпадений):

/^http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F(\d)$/ 

ответ

1

При правильном URL функции синтаксического анализа вы можете сделать это:

parse_str(parse_url($url, PHP_URL_QUERY), $params); 
if (isset($params['url'])) { 
    parse_str(parse_url($params['url'], PHP_URL_QUERY), $params); 
    if (isset($params['movie'])) { 
     $movie = $params['movie']; 
    } 
} 
1

Там в пути без разбора тоже. Предполагая, что $ URL = URL

http://codepad.org/t91DK9H2

$url = "http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567%2Fsubtitle"; 
$reg = "/^([\w\d\.:]+).*movie%2F(\d+).*/"; 
$id = preg_replace($reg,"$2",$url); 
3

Я бы рекомендовал Вам сначала parse this url и извлечь параметр строки url запросов и URL декодирование:

function getParameterByName(url, name) 
{ 
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 
    var regexS = "[\\?&]" + name + "=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(url); 
    if(results == null) 
    return ""; 
    else 
    return decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

так:

var url = 'http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567'; 
var p = getParameterByName(url, 'url'); 

, а затем используйте некоторое регулярное выражение для разобрать p и извлечь необходимую информацию, например /\d+/.

1
$urls = array(
    'http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567' 
    , 'http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567%2Fsubtitle' 
    , 'http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F123456' 
    , 'http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F123456%2Fsubtitle' 
    , 'http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F1234567%2F' 
    , 'http://example.com/movie.swf?url=http%3A%2F%2Fexample.com%2Fmovie%2F123456%2F' 
); 

foreach ($urls as $url) { 
    if (preg_match('/%2Fmovie%2F(\d+)/', $url, $matches)) { 
     var_dump($matches[1]); 
    } 
} 

KISS. Я изначально собирался использовать parse_url(), но в любом случае не существует возможности синтаксического анализа строки запроса без регулярных выражений.

0

Кажется, вам нужно избегать некоторых специальных символов. попробовать:

/^http://example.com/movie.swf\?url=http%3A%2F%2Fexample.com%2Fmovie%2F(\d+)$/

Смежные вопросы