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 中获取它,那么抓取会更友好