如何使用PHP HTML DOM提取特定单词后的指定字符串
用PHP的HTML DOM工具提取指定字符串的方案
嘿,这个需求我刚好处理过类似的,给你一步步拆解怎么做:
第一步:用DOMDocument定位到目标script内容
首先,咱们得先把HTML里的<div class="abc">标签找出来,再拿到里面的<script>代码。PHP的DOMDocument可以搞定这部分,但要注意默认的HTML解析可能会抛出警告(比如遇到不规范的HTML),所以先把警告屏蔽掉更稳妥。
示例代码:
// 替换成你实际的HTML内容,也可以从文件/URL加载 $html = <<<HTML <div class="abc"> <script type="text/javascript"> var flashvars = { word : "/path/to/your/target/file.mp4", otherParam : "some extra value" }; </script> </div> HTML; // 屏蔽HTML解析时的警告 libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML($html); libxml_clear_errors(); // 用XPath精准定位class为abc的div $xpath = new DOMXPath($dom); $abcDivs = $xpath->query('//div[@class="abc"]'); if ($abcDivs->length > 0) { // 获取div内的第一个script标签(如果有多个,可根据type进一步筛选) $targetScript = $abcDivs->item(0)->getElementsByTagName('script')->item(0); if ($targetScript) { $scriptContent = $targetScript->nodeValue; // 接下来处理script里的内容... } }
第二步:用正则提取word对应的path值
拿到script内容后,就可以用正则表达式匹配word :后面的path值了。这里考虑了几种常见场景:path可能用单引号、双引号包裹,或者冒号前后有/无空格。
推荐的正则匹配代码:
if (preg_match('/word\s*:\s*["\']?([^"\',}]+)["\']?/', $scriptContent, $matches)) { $extractedPath = $matches[1]; echo "提取到的path值:" . $extractedPath; } else { echo "未找到对应的path值"; }
正则逻辑简单解释
word\s*::匹配word关键词,后面允许任意数量的空格,再匹配冒号\s*:匹配冒号后任意数量的空格["\']?:匹配可选的单/双引号(有些场景下path可能没有引号包裹)([^"\',}]+):捕获引号、逗号、大括号之外的内容——也就是我们要的path值["\']?:匹配结尾可选的引号
小提醒
如果你的实际场景中,flashvars里的word写法有特殊情况(比如用了不同的分隔符、换行),可以根据实际结构微调正则表达式的匹配规则,确保精准捕获目标内容。
内容的提问来源于stack exchange,提问作者Ajit Raghav
相关产品推荐
相关产品推荐

