2014-01-09 2 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 /(.*)», ф /", $ 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, потому что он оставлял дополнительный код, который я не мог правильно подобрать. Я посмотрел URL, который вы разместили, но если переменная не всегда одинакова, я не могу этого сделать. – 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); 

страница матчей/точно, \ K удаляет совпадающую часть, то она позволяет любое количество букв или цифр, пока не достигнет не-буквы или цифры, как "

результаты вдаваться в массив и могут быть доступны как $ array [0] [x]

+0

Это ближайшее место. Спасибо. Я надеялся, что мне нечего будет удалять. – user3175648

+0

, отредактированный для добавления \ K, который автоматически удалит совпадающую страницу/ –

+0

\ K, что делает ее возвратной. – user3175648

Смежные вопросы