上面的网站显示了正确的正则表达式,但是当我使用PHP时它没有显示某些名称,例如'JJ5x5's White Top Hat'
这是PHP:
<?php
function newEcho($Value){
echo $Value . "<br>";
};
function cURLAuto($URL){
$Channel = curl_init();
curl_setopt($Channel, CURLOPT_URL, $URL);
curl_setopt($Channel, CURLOPT_RETURNTRANSFER, 1);
return curl_exec($Channel);
};
function autoMatchAll($String,$Pattern){
$Found = array();
$Match = preg_match_all($Pattern,$String,$Found);
return $Found;
};
function replaceMatch($String,$Pattern,$Subject){
return str_replace($Pattern,$Subject,$String);
};
$Count = 0;
$Output = cURLAuto("www.roblox.com/catalog/json?Subcategory=2&SortType=0&SortAggregation=3&SortCurrency=0&LegendExpanded=true&Category=2&PageNumber=1");
$AssetId = autoMatchAll($Output,'/"AssetId":[\d]+/');
$Name = autoMatchAll($Output,'/"Name":"[\w\s\d\-' . "\'" . ']+"/');
foreach($AssetId[0] as $Value){
newEcho(replaceMatch($Value,'"AssetId":',"") . ":" . replaceMatch(replaceMatch($Name[0][$Count],'"Name":"',""),'"',""));
$Count++;
};
echo $Output
?>
$Name
是我遇到正则表达式问题的原因,因为它在显示运行代码时只显示了一些名称。 $Name
的正则表达式是
/"Name":"[\w\s\d\-\']+"/
但由于我不能使用'或'作为字符串我必须使用
'/"Name":"[\w\s\d\-' . "\'" . "]+/"
但是你可以帮我解决这个问题,因为我想解决这个问题。
答案 0 :(得分:1)
我敢打赌,'
中的JJ5x5's White Top Hat
是“印刷撇号”,’
(Unicode:U+2019 "RIGHT SINGLE QUOTATION MARK"
,Windows代码页1252:0x92
, PHP中的UTF-8:"\xE2\x80\x99"
)。从ASCII单引号中告诉印刷撇号/引用:如果它直接指向(在原始字符串中!),它是ASCII单引号,如果不是,则为印刷撇号/引号。
如果您只想匹配截止的双引号,请使用'/"Name":"[^"]+"/'
,除非您可以在名称中使用双引号转义,在这种情况下,正则表达式变为(在PHP中)'/"Name":"(?:[^\\\\"]|\\\\[\\\\"])+"/'
(将其他可能的转义添加到最后一个类中。)
答案 1 :(得分:0)
试试这个:
'/"Name":"(.*?)"/'