У меня есть код для получения списка шаблонов с веб-сайта: 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, но у меня есть ошибка. и эре тоже
preg_match
Не могли бы вы помочь мне, пожалуйста
Попробуйте использовать preg_quote, чтобы избежать косой черты в URL:
if(preg_match('/' . preg_quote($url) . '/', $ent)) return true;
Или изменить разделитель:
if(preg_match('%' . $url . '%', $ent)) return true
Вы должны обернуть регулярные выражения разделителями - я использую ( и ) ниже:
(
)
<?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 )