preg_match_all在标记内发生

时间:2014-01-09 01:17:16

标签: php preg-match-all

我已经在http://regex101.com/练习了很多,但是在我的生活中无法正确地训练。

我正在尝试从多个标签中获取部分onclick功能,但它只是弄得一团糟。

<a href="https://URL" onclick="return ajax({code:'page/97b7a6651b9f3f3H',form_id:'id456',top:0,update_id:'inner-container'});" class="get-button" target="_top"><span class="button"><span class="icon">&nbsp;</span>Attack</span></a>

<a href="https://URL" onclick="return ajax({code:'page/97b7a6651b96c6b7e398f',form_id:'id123',top:0,update_id:'inner-container'});" class="get-button" target="_top"><span class="button"><span class="icon">&nbsp;</span>Attack</span></a>

它像这样返回 - &gt; 3dc061fb74fe59orm_id:'bounty_attack_form_515998115'});“class =”get-button“target =”_ top“&gt; Attack

我只想要97b7a6651b9f3f3H和97b7a6651b96c6b7e398f。

我尝试了多种方式,我知道这个PHP代码是错误的,但这就是我所拥有的。     preg_match_all(“/ ge /(.*)”,f /“,$ server_output,$ matches); $ remove = array(“ge /”,“',f”);

foreach ($matches[0] as $match) 
{ 
$match = str_replace($remove, "", $match);
    echo '[ ' . $match . ' ]<br>'; 
} 

2 个答案:

答案 0 :(得分:0)

我猜测有一种更简洁的方法可以做到这一点,但这很有效:

$string = "<a href=\"https://URL\" onclick=\"return ajax({code:'page/97b7a6651b9f3f3H',form_id:'id456',top:0,update_id:'inner-container'});\" class=\"get-button\" target=\"_top\"><span class=\"button\"><span class=\"icon\">&nbsp;</span>Attack</span></a>";

$string .= "<a href=\"https://URL\" onclick=\"return ajax({code:'page/97b7a6651b9f3f3H',form_id:'id456',top:0,update_id:'inner-container'});\" class=\"get-button\" target=\"_top\"><span class=\"button\"><span class=\"icon\">&nbsp;</span>Attack</span></a>";

preg_match_all("/code:\'page\/(.*?)\'/", $string, $matches);

foreach ($matches as $match) {
    if (isset($match[1])) {
        $codes[] = $matches[1];
    } 
}

var_dump($codes);

看到它的实际效果: http://ideone.com/YkIWig

如果有人比我更聪明的想要编辑这个,请做!

答案 1 :(得分:0)

preg_match_all("/page\/\K\w*/", $string_to_search, $array);
print_r($array);

匹配页面/确切地说,\ K删除匹配的部分,然后它允许任意数量的字母或数字,直到它击中非字母或数字,如'

结果进入一个数组,可以作为$ array [0] [x]

访问