2014-05-11 20 views
5

Tôi muốn trích xuất một số từ html, giữa <td>...</td>. Tôi đã thử theo dõi mã sau:Nhiều ký tự đại diện preg_match_all php

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

sau khi xem-là một số ngẫu nhiên. Mã đúng để bỏ qua số ngẫu nhiên trong tìm kiếm là gì?

+0

Bạn có thể đăng một ví dụ về html bạn muốn khớp không? –

+0

' ' Số 4 là những gì tôi muốn có được với preg_match_all – user3625376

+0

' adv-Kết quả-views- \ d + ' – bansi

Trả lời

1

Sử dụng một DOM sẽ đúng cách ..

Tiến hành theo cách này ...

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

nó không phải là số tôi muốn trích xuất nhưng "Sometext" trong ví dụ của bạn. Và không thể thực hiện DOM vì lớp được sử dụng trong nhiều số và id là ngẫu nhiên. – user3625376

+0

Tôi không nghĩ rằng bạn hoàn toàn hiểu được câu hỏi. –

+0

@ user3625376, Ý bạn là một cái gì đó như thế này? 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); 

Đây là một ví dụ regex kể từ khi câu hỏi được gắn thẻ như vậy, nhưng DOM là cách ưa thích (đặc biệt là trong cộng đồng SO) để phân tích cú pháp html.

Các vấn đề liên quan