3

正規表現は初めてです。このhtmlタグの正しい組み合わせは何でしょうか。

   <tr class="calendar_row" data-eventid="39654">
      <td class="alt1 eventDate smallfont" align="center"/></td>
      <td class="alt1 smallfont" align="center">3:34am</td>
      <td class="alt1 smallfont" align="center">CNY</td>
   </tr>

私はこれを使用しています:

   $html = website html from a url
   $match = array();

   $pattern = "/(<tr.*?\data-eventid\>.*?<\/tr>)/ims";
   preg_match_all($pattern, $html, $match);

しかし、それは機能していません:| そのtr要素のすべてのコンテンツを選択したいだけです。

よろしくお願いします。

4

1 に答える 1

6

DOMDocumentの使用

このようなものには正規表現を使用しないでください。むしろ、マークアップからDOMDocumentを作成してから、その特定の要素から子を選択します。たとえば、次のようにすると<td>、マークアップ内の各タグの集合的なhtmlが得られます。

// Our HTML will eventually go here
$innerHTML = "";

// Create a new DOMDocument based on our HTML
$document = new DOMDocument;
$document->loadHTML($html);

// Get a NodeList of all <td> Elements
$cells = $document->getElementsByTagName("td");

// Cycle over each <td>, adding its HTML to $innerHTML
foreach ($cells as $cell) {
    $innerHTML .= $document->saveHTML($cell);
}

// Output our glorious HTML
echo $innerHTML;

正規表現

trを使用してタグの間にあるものを本当に取得したい場合はpreg_match、次のように機能するはずです。

// Our pattern for capturing all that is between <tr> and </tr>
$pattern = "/<tr[^>]*>(.*)<\/tr>/s";

// If a match is found, store the results in $match
if (preg_match($pattern, $html, $match)) {
    // Show the captured value
    echo $match[1];
}

その結果、次のようになります。

<td class="alt1 eventDate smallfont" align="center"></td>
<td class="alt1 smallfont" align="center">3:34am</td>
<td class="alt1 smallfont" align="center">CNY</td>
于 2012-12-14T03:11:17.720 に答える