第一個字符我如何使用這樣的:匹配的相同
<div class="content"><div>Content</div></div>
和匹配這樣的:
<div>Content</div>
我用這個正則表達式,但它不工作,因爲它的最後一個div匹配
/<div\s?(.*)>(.*)<\/div>/
第一個字符我如何使用這樣的:匹配的相同
<div class="content"><div>Content</div></div>
和匹配這樣的:
<div>Content</div>
我用這個正則表達式,但它不工作,因爲它的最後一個div匹配
/<div\s?(.*)>(.*)<\/div>/
正如@Quill說,正則表達式可能不是你最好的選擇,但如果你以某種方式解析HTML字符串的東西,你可以強制噸改變正則表達式,以便它通過編輯(.*)
選擇一切到下一個角度托架(僅該div)第一封閉</div>
相符:
/<div\s?([^>]*)>([^<]*)<\/div>/
我還編輯爲<div>
屬性選擇器。
這是最簡單的方法。爲了使它更先進,你可以使用lookahead正則表達式。
在這種情況下使用正則表達式進行HTML解析並不合適,因爲您處理遞歸結構。使用DOMDocument
:
$html = '<div class="content"><div>Content</div></div>';
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$divs = $xpath->query('//div[@class="content"]'); // Get all DIV tags with "class" attribute with "content" as its value
foreach($divs as $div) {
foreach ($div->childNodes as $childNode) {
echo $dom->saveHTML($childNode);
}
}
結果:<div>Content</div>
您將需要一些調整,如果輸入包含無效的HTML,但我想它是不是這樣的。
根據你在做什麼,你不需要正則表達式,並在同一筆記,你**不應該**使用正則表達式來解析HTML:閱讀[本答案](http:// stackoverflow。 com/a/1732454/3296811)瞭解更多信息。考慮使用「DOM」操作。 – Quill