我有一个代码可以从网站获取模式列表: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
,但我有一个错误。和ereg也是
答案 0 :(得分:1)
尝试使用preg_quote以逃避网址中的斜杠:
if(preg_match('/' . preg_quote($url) . '/', $ent))
return true;
或更改分隔符:
if(preg_match('%' . $url . '%', $ent))
return true
答案 1 :(得分:0)
您需要使用分隔符包装正则表达式 - 我在下面使用(
和)
:
<?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
)