PHP中用preg_match提取HTML字符串里myfunction的数值参数失败求助
解决从HTML字符串中提取myfunction参数数值的问题
你的问题出在正则表达式的写法上,咱们一步步捋清楚问题所在,再给出解决方案:
原正则的错误点
- 错误使用方括号:你写的
\[return myfunction([0-9]+)\]里的\[和\]是匹配字面量的方括号,但你的目标字符串里根本没有方括号,而是圆括号(),这直接导致正则匹配不到内容。 - 未转义圆括号:正则里的
()是用来分组的特殊符号,如果你要匹配字符串里的实际圆括号,需要用反斜杠转义成\(和\)。 - 未匹配完整的函数调用结构:你的目标内容是
return myfunction(12314568);,原正则没有考虑到括号闭合后的分号,虽然这个不是核心问题,但会影响匹配的精确性。
修正后的解决方案
我们需要调整正则表达式,精准匹配myfunction(数字)这个结构,把括号里的数字捕获出来。这里有两种可选的正则写法:
写法一:精准匹配完整的onclick内容片段
$data = "<th style='text-align:center;width:33%;'><a onclick='return myfunction(12314568);' href='#test' class='btn mini full'>Test</a> </th>"; // 匹配return myfunction(数字);的结构,捕获括号里的数字 preg_match("/return myfunction\((\d+)\);/", $data, $m); print_r($m);
运行结果会是:
Array ( [0] => return myfunction(12314568); [1] => 12314568 )
你需要的数值就是$m[1]。
写法二:仅匹配myfunction的参数(更灵活)
如果页面里的myfunction调用可能没有return前缀,或者后面的分号可能有变化,你可以简化正则,只匹配函数名和括号里的数字:
preg_match("/myfunction\((\d+)\)/", $data, $m); print_r($m);
这个写法同样能捕获到12314568,适用性更广。
补充说明
\d+是正则里匹配一个或多个数字的简写,和[0-9]+效果完全一样,用起来更简洁。- 如果你需要确保只提取
onclick属性里的函数调用(避免页面其他地方同名函数干扰),可以把正则写得更严谨,比如匹配onclick='开头的片段:
preg_match("/onclick='return myfunction\((\d+)\);'/", $data, $m);
内容的提问来源于stack exchange,提问作者MaryCoding
相关产品推荐
相关产品推荐

