PHP 正则表达式匹配 JavaScript 变量内容错误解析
以下 PHP 代码使用正则表达式匹配 JavaScript 变量内容,但匹配结果不正确,可能是因为正则表达式中的变量名与实际不符合。/n/nphp/n$html = '<script type=/'text/javascript/'>var player_aaaa = {/'flag/':/'play/',/'encrypt/':0,/'trysee/':0,/'points/':0,/'link/':/'///vodplay///339927-1-1.html/',/'link_next/':/'/',/'link_pre/':/'/',/'vod_data/':{/'vod_name/':/'//u9053//u58eb//u964d//u9b542//u4e4b//u50f5//u5c38//u6751/',/'vod_actor/':/'//u6768//u6613//u4e4b,//u9648//u8bd7//u5609,//u8fb0//u8f69//u9510/',/'vod_director/':/'//u6768//u6613//u4e4b/',/'vod_class/':/'//u6050//u6016,//u5267//u60c5/'},/'url/':/'https://////vip.lz-cdn7.com///20230118///13580_14fd770e///index.m3u8/',/'url_next/':/'/',/'from/':/'lzm3u8/',/'server/':/'no/',/'note/':/'/',/'id/':/'339927/',/'sid/':1,/'nid/':1};</script><script type=/'text/javascript/' src=/'///static///js///playerconfig.js?t=20230527/'></script><script type=/'text/javascript/' src=/'///static///js///player.js?t=a20230527/'></script>';/n/npreg_match('/var player_aaaa=(.*?);/', $html, $match);/n/nif(isset($match[1])) {/n $player_data = json_decode($match[1], true);/n // 输出所有键值内容/n print_r($player_data);/n}/n?>/n/n/n问题分析:/n/n代码中的正则表达式 /var player_aaaa=(.*?);/ 匹配的是 var player_aaaa= 之后的所有内容,直到遇到第一个分号 ; 为止。但是,在实际的 JavaScript 代码中,变量 player_aaaa 的值是一个 JSON 对象,可能包含多个分号,因此导致正则表达式匹配不完整。/n/n解决方案:/n/n建议修改正则表达式,确保正确匹配所需内容。/n/nphp/n$html = '<script type=/'text/javascript/'>var player_aaaa = {/'flag/':/'play/',/'encrypt/':0,/'trysee/':0,/'points/':0,/'link/':/'///vodplay///339927-1-1.html/',/'link_next/':/'/',/'link_pre/':/'/',/'vod_data/':{/'vod_name/':/'//u9053//u58eb//u964d//u9b542//u4e4b//u50f5//u5c38//u6751/',/'vod_actor/':/'//u6768//u6613//u4e4b,//u9648//u8bd7//u5609,//u8fb0//u8f69//u9510/',/'vod_director/':/'//u6768//u6613//u4e4b/',/'vod_class/':/'//u6050//u6016,//u5267//u60c5/'},/'url/':/'https://////vip.lz-cdn7.com///20230118///13580_14fd770e///index.m3u8/',/'url_next/':/'/',/'from/':/'lzm3u8/',/'server/':/'no/',/'note/':/'/',/'id/':/'339927/',/'sid/':1,/'nid/':1};</script><script type=/'text/javascript/' src=/'///static///js///playerconfig.js?t=20230527/'></script><script type=/'text/javascript/' src=/'///static///js///player.js?t=a20230527/'></script>';/n/npreg_match('/var player_aaaa = (/{.*?/});/', $html, $match);/n/nif(isset($match[1])) {/n $player_data = json_decode($match[1], true);/n // 输出所有键值内容/n print_r($player_data);/n}/n?>/n/n/n修改后的正则表达式说明:/n/n* var player_aaaa = :匹配变量名和赋值符号。/n* (/{.*?/}):匹配花括号 { 和 } 之间的所有内容,作为捕获组。/n/n通过修改正则表达式,可以准确地匹配到 JavaScript 变量 player_aaaa 的 JSON 值,从而解决匹配错误的问题。/n/n其他建议:/n/n* 使用更专业的 JSON 解析库,例如 json_decode 函数,来解析 JSON 字符串。/n* 确保正则表达式与目标字符串的结构相匹配,避免出现匹配错误。/n* 使用在线正则表达式测试工具,例如 https://regex101.com/,测试正则表达式是否正确匹配目标字符串。
原文地址: https://www.cveoy.top/t/topic/ojhk 著作权归作者所有。请勿转载和采集!