проверка соответствия URL шаблону - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть код для получения списка шаблонов с веб-сайта: https://noembed.com/providers

со следующим кодом, я могу отобразить все шаблоны:

$supported = 'https://noembed.com/providers' ;
$jsonSUPP = json_decode(file_get_contents($supported),true) ;
echo 'pour:'.$url.'<br/>'  ;
foreach ($jsonSUPP as $key => $value) { 
foreach ($value[patterns] as $ent) { 
echo "**patt : $ent <br />\n" ;
}
}

Теперь я хотел бы создать условие: если $ url совпадает с $ ent, тогда ... Я пытался с preg_match, но у меня есть ошибка. и эре тоже

Не могли бы вы помочь мне, пожалуйста

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Попробуйте использовать preg_quote, чтобы избежать косой черты в URL:

if(preg_match('/' . preg_quote($url) . '/', $ent))
   return true;

Или изменить разделитель:

if(preg_match('%' . $url . '%', $ent))
   return true
0 голосов
/ 03 ноября 2011

Вы должны обернуть регулярные выражения разделителями - я использую ( и ) ниже:

<?php

$url = "http://en.wikipedia.org/wiki/Error";

$supported = 'https://noembed.com/providers' ;
$jsonSUPP = json_decode(file_get_contents($supported),true) ;
echo 'pour:'.$url."<br/>\n"  ;
$match = NULL;
foreach ($jsonSUPP as $key => $value) { 
    foreach ($value['patterns'] as $ent) { 
        if (preg_match("(".$ent.")",$url)) {
            $match = $key;
            break;
        }
        //echo "**patt : $ent <br />\n" ;
    }
    if ($match !== NULL) {
        break;
    }
}
if ($match) {
    echo "$url matched $match ({$jsonSUPP[$match]['name']}): \n";
    print_r($jsonSUPP[$match]);
}

Выход:

pour:http://en.wikipedia.org/wiki/Error<br/> 
http://en.wikipedia.org/wiki/Error matched 3 (Wikipedia): 
Array  (
  [patterns] => Array
     (
         [0] => http://[^\.]+\.wikipedia\.org/wiki/.*
     )

  [name] => Wikipedia 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...