我有以下代码,我正在尝试修复。
代码:
$pageData = file_get_contents('111234-2.html');
if(preg_match_all('/<a\s+onclick=["\']([^"\']+)["\']/i', $pageData, $links, PREG_PATTERN_ORDER))
print_r(array_unique($links[1]));
return false;
我想要从中获取的一些示例HTML:
<a onclick="doShowCHys=1;ShowWindowN(0,'http://www.example.com/home/Player.aspx?lpk4=116031&playChapter=False',960,540,111234);return false;" href="javascript:void(0);">
<span class="vt">Welcome
</span>
<span class="dur">1m 10s</span>
<span class="" id="bkmimgview-116031"> </span>
<br class="clear">
</a>
我得到的输出:
Array ( [0] => doShowCHys=1;ShowWindowN(0, )
我希望的输出:
Array ( [0] => doShowCHys=1;ShowWindowN(0,'http://www.example.com/home/Player.aspx?lpk4=116031&playChapter=False',960,540,111234);return false;)
我如何实现这一目标?
答案 0 :(得分:4)
你可以使用反向引用来改善这一点,但如果有更多级别的嵌套引号,你就注定要失败。
'/<a\s+onclick=(["\'])((?:(?!\1).)+)\1/i'
反向引用允许您引用已捕获的组。因此,如果您在第一次捕获中捕获了"
,那么您希望找到一个非"
的字符串,同样,如果您在第一次捕获中捕获了'
,那么你想找到一个非'
的字符串,并且两种方式分别以"
或'
结尾。
修改强>
@vladr提供了一个更好的选择:
'/<a\s+onclick=(["\'])(.*?)\1/i'
同样的想法,但非贪婪的量词使得没有必要测试每个字符的非任何引用。更新了Rubular链接:http://rubular.com/r/VXR1nQ4zf5。