簡體   English   中英

Preg_match在div標簽中獲取div標簽中的內容

[英]Preg_match getting contents in div tags in div tags

我想使用類viewContent提取div標簽的所有內容,但是當我執行我的代碼時,php到達div的第一個關閉標簽時停止了問題。 我該怎么辦? 我在下面有我的示例代碼,但仍然只有第一個div標簽得到。 謝謝你們對我的幫助。

  preg_match_all('#<div class="viewContent"[^>]*>(.*?)</div[^>]*>#is', $content, $s);
    print_r($s);

這是我的代碼的圖像。

懶惰或貪婪的搜索在這里用處不大,因為它必須匹配</div> ,而</div><div class="viewContent">不對應。 因此,結尾注釋在這里可以使用,因為它在邏輯上標記了所需划分的結尾。

使用以下正則表達式只能獲取<div class="viewControl">的內容。

正則表達式: <div class="viewContent"[^>]*>(.*?)<\\/div[^>]*>(?=<!--viewContent-->)

說明:

  • <div class="viewContent"[^>]*>(.*?)<\\/div[^>]*>這與帶有延遲搜索的除法匹配。

  • (?=<!--viewContent-->)positively looks ahead注釋,這些注釋在邏輯上標志着<div>的結尾

Regex101演示

如果可以保證所需div的結束標記以<!--viewContent--> ,則可以使用:

<div class="viewContent"[^>]*>(.*?)</div[^>]*><!--viewContent-->

否則,您可能只想使用HTML解析器。

您可以使用DOMDocument類中內置的PHP來解析頁面的html,並使用DOMXPath類來提取具有特定HTML類的HTML元素的值:

<?php
$html = '';//HTML goes here
$doc = new DOMDocument();
@$doc->loadHTML($html);
$classname = "viewContent";
$finder = new DomXPath($doc);
$spanner = $finder->query("//*[contains(@class, '$classname')]");
foreach ($spanner as $entry) {
  echo $entry->nodeValue;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM