2014-01-09 51 views
0

我在http://regex101.com/上練過很多東西,但一直未能正確匹配我的生活。preg_match_all發生在標籤內

我試圖從多個標籤獲取部分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> 

它返回這樣的 - > 3dc061fb74fe59orm_id: 'bounty_attack_form_515998115'});」類= 「獲得按鈕」 TARGET = 「_頂」>攻擊

在哪裏,我只希望97b7a6651b9f3f3H和97b7a6651b96c6b7e398f。

我試過多種方法,我知道這個PHP代碼是錯誤的,但這是我有 preg_match_all( 「/ GE /(.*)」,F /」,$ server_output,$匹配); $ remove = array(「ge /」,「',f」);

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

我已經在http://regex101.com/上練了很多,但一直無法爲我的生活正確地預先匹配..沒有練過很多! :-) – Rottingham

+1

說真的,你不需要使用preg_match來找到某些東西,然後用str_replace代替它。您可以使用preg_replace並應用相同的正則表達式規則。 http://us3.php.net/manual/en/function.preg-replace.php – Rottingham

+0

我只是str_replacing,因爲它留下了額外的代碼,我無法正確匹配。我查看了您發佈的網址,但如果該變量不總是相同,那麼我無法這樣做。 – user3175648

回答

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

如果有人更智能的正則表達式比我想編輯此,請做!

+0

您可以將上述標籤添加到您的字符串中供我測試。我確信這是正確的方法,但是當我運行它時,我仍然有一些額外的東西落後。 – user3175648

+0

如果你的意思是完整的 Rottingham

+0

多個A標籤。我只能用一個來完成,但是如果有10個或更多,它就不一樣了。 – user3175648

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

比賽頁/確切,\ķ刪除匹配的部分,那麼它允許任何數量的字母或數字,直到遇到一個非字母或數字,如「

結果進入一個數組,並可以作爲$ array訪問[0] [x]

+0

這是最接近的。謝謝。我希望我不會刪除任何東西。 – user3175648

+0

編輯添加\ K將自動刪除匹配的頁面/ –

+0

\ K使它迴歸空白。 – user3175648