2014-05-11 17 views
5

Chcę wyodrębnić liczbę z html, między <td>...</td>. Próbowałem wykonać następujący kod:Wiele symboli wieloznacznych preg_match_all php

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

Po wyśw. -jest liczbą losową. Jaki jest właściwy kod do ignorowania losowej liczby w wyszukiwaniu?

+0

Czy możesz podać przykład html, który chcesz dopasować? –

+0

'' numer 4 jest to, co chciałbym dostać z preg_match_all – user3625376

+0

'adv-wynik-Wyświetlenia z wyników \ d + ' – bansi

Odpowiedz

1

Korzystanie DOM będzie odpowiedni sposób ..

postępować w ten sposób ...

<?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 
+0

to nie liczby, które chciałabym wyodrębnić, ale "Twój tekst" w twoim przykładzie. I DOM nie jest możliwe, ponieważ klasa jest używana w wielu numerach , a identyfikator jest losowy. – user3625376

+0

Nie sądzę, że w pełni zrozumiałeś pytanie. –

+0

@ user3625376, Masz na myśli coś takiego? https://eval.in/149603 –

1
$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); 

Jest regex przykład ponieważ pytanie jest oznaczone jako takie, ale jest DOM preferowany sposób (szczególnie w społeczności SO) do parsowania html.

Powiązane problemy