PHP 正则表达式匹配引号之间的特定模式
PHP Regex Match Specific Pattern between Quotes
我有以下模式的字符串:
adfadfadfadfadfadfafdadfa"externalId":"UCEjBDKfrqQI4TgzT9YLNT8g"afadfadfafadfdaffzfzfzxf
基本上,我需要找到“externalId”并在后面的引号之间提取它的值。值的长度可以改变,所以它需要是两个引号内的所有内容。在这种情况下,期望的结果是 return:
UCEjBDKfrqQI4TgzT9YLNT8g
这是我目前的情况:
$test = file_get_contents('https://www.youtube.com/c/GhostTownLiving');
$test = htmlentities($test);
if (strpos($test, 'externalId') !== false) {
echo 'true';
}
我尝试了高级 HTML Dom,但由于这些 YouTube 频道页面中的这些 externalId 属性 是通过 javascript 加载的,所以我无法成功定位它。
基本上,我使用 htmlentities return 代码,然后我想提取 externalId 值。
如何编写正则表达式模式来匹配它?谢谢!
解析整个 JSON,然后对其进行解码并遍历到您想要的值。
<?php
$test = file_get_contents('https://www.youtube.com/c/GhostTownLiving');
// match the ytInitialData JSON
preg_match('#var ytInitialData = {(.*?)};</script>#', $test, $matches);
// add back the surounding {}'s, and parse
$ytInitialData = json_decode('{'.$matches[1].'}');
// then you have that massive object easily accessible
echo $ytInitialData->metadata->channelMetadataRenderer->externalId; // UCEjBDKfrqQI4TgzT9YLNT8g
不过,如果您可以从 API 中获取它,那么抓取会更友好
我有以下模式的字符串:
adfadfadfadfadfadfafdadfa"externalId":"UCEjBDKfrqQI4TgzT9YLNT8g"afadfadfafadfdaffzfzfzxf
基本上,我需要找到“externalId”并在后面的引号之间提取它的值。值的长度可以改变,所以它需要是两个引号内的所有内容。在这种情况下,期望的结果是 return:
UCEjBDKfrqQI4TgzT9YLNT8g
这是我目前的情况:
$test = file_get_contents('https://www.youtube.com/c/GhostTownLiving');
$test = htmlentities($test);
if (strpos($test, 'externalId') !== false) {
echo 'true';
}
我尝试了高级 HTML Dom,但由于这些 YouTube 频道页面中的这些 externalId 属性 是通过 javascript 加载的,所以我无法成功定位它。
基本上,我使用 htmlentities return 代码,然后我想提取 externalId 值。
如何编写正则表达式模式来匹配它?谢谢!
解析整个 JSON,然后对其进行解码并遍历到您想要的值。
<?php
$test = file_get_contents('https://www.youtube.com/c/GhostTownLiving');
// match the ytInitialData JSON
preg_match('#var ytInitialData = {(.*?)};</script>#', $test, $matches);
// add back the surounding {}'s, and parse
$ytInitialData = json_decode('{'.$matches[1].'}');
// then you have that massive object easily accessible
echo $ytInitialData->metadata->channelMetadataRenderer->externalId; // UCEjBDKfrqQI4TgzT9YLNT8g
不过,如果您可以从 API 中获取它,那么抓取会更友好