Несколько подстановочных знаков preg_match_all php

Я хочу извлечь число из html, между <td>...</td>. Я попытался выполнить следующий код:

$views = "/<td id=\"adv-result-views-(?:.*)\" class=\"spec\">(.*?)<\/td>/";

после -views- это случайное число. Какой правильный код для игнорирования случайного числа в поиске?


person user3625376    schedule 11.05.2014    source источник
comment
Можете ли вы опубликовать пример html, который вы хотите сопоставить?   -  person Pedro Lobito    schedule 11.05.2014
comment
<td id="adv-result-views-190147977" class="spec"> 4 </td> Число 4 — это то, что я хотел бы получить с preg_match_all   -  person user3625376    schedule 11.05.2014
comment
@PedroLobito, прекрати рекламировать свой ответ. OP получит уведомление, когда вы опубликуете один раз.   -  person Shankar Narayana Damodaran    schedule 11.05.2014


Ответы (2)


Использование DOM будет правильным способом..

Продолжайте в том же духе...

<?php
$htm = '<td id="adv-result-views-190147977" class="spec"> 4 </td>';
$dom = new DOMDocument;
$dom->loadHTML($htm);
echo $content = $dom->getElementsByTagName('td')->item(0)->nodeValue; //4
person Shankar Narayana Damodaran    schedule 11.05.2014
comment
это не числа, которые я хотел бы извлечь, а Sometext в вашем примере. И DOM невозможен, поскольку класс используется в нескольких td, а идентификатор является случайным. - person user3625376; 11.05.2014
comment
Я не думаю, что вы полностью поняли вопрос. - person Pedro Lobito; 11.05.2014
comment
@ShankarDamodaran прав в своем подходе к использованию DOM. - person hank; 11.05.2014

$html = '<td id="adv-result-views-190147977" class="spec"> 4 </td>';

// get the value of element
echo trim( strip_tags( $html ) );

// get the number in id attribute, replace string with group capture $1
echo preg_replace( '/^.*?id="[\pLl-]+(\d+).*$/s', '$1', $html );   
/*
    ^.*?id="            Any character from the beginning of string, not gready
        id="            Find 'id="'
            [\pLl-]+    Lower case letter and '-' ( 1 or more times )
            (\d+)       Group and capture to \1 -> digits (0-9) (1 or more times) -> end of \1                      
    .*$                 Any character, gready, until end of the string
*/

// get html withut the number in id attribute
echo preg_replace( '/(^.*?id="[\pLl-]+)(\d+)(.*$)/s', '$1$3', $html );

Это пример регулярного выражения, поскольку вопрос помечен как таковой, но DOM является предпочтительным способом (особенно в сообществе SO) для анализа html.

person Danijel    schedule 11.05.2014