Php 匹配相同字符的第一个字符
我如何使用这个:Php 匹配相同字符的第一个字符,php,html,regex,Php,Html,Regex,我如何使用这个: <div class="content"><div>Content</div></div> 内容 与此匹配: <div>Content</div> 内容 我使用了这个正则表达式,但它不起作用,因为它匹配最后一个div /<div\s?(.*)>(.*)<\/div>/ /(*)/ 正如@Quill所说,正则表达式可能不是您的最佳选择,但是如果您以某种方式解析HTML字符串,
<div class="content"><div>Content</div></div>
内容
与此匹配:
<div>Content</div>
内容
我使用了这个正则表达式,但它不起作用,因为它匹配最后一个div
/<div\s?(.*)>(.*)<\/div>/
/(*)/
正如@Quill所说,正则表达式可能不是您的最佳选择,但是如果您以某种方式解析HTML字符串,您可以通过编辑(.*)
来选择下一个尖括号(仅该div)的所有内容,更改正则表达式,使其与第一个结束符相匹配:
/]*)>([^在这种情况下使用正则表达式进行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);
}
}
$html='Content';
$dom=新的DOMDocument('1.0','UTF-8');
$dom->loadHTML($html,LIBXML\u html\u noimpled | LIBXML\u html\u NODEFDTD);
$xpath=newdomxpath($dom);
$divs=$xpath->query('//div[@class=“content”]);//获取所有具有“class”属性且值为“content”的div标记
foreach($div作为$div){
foreach($div->childNodes作为$childNode){
echo$dom->saveHTML($childNode);
}
}
看
结果:Content
如果您的输入包含无效的HTML,您将需要一些调整,但我想情况并非如此。
取决于您正在做什么,您不需要正则表达式,并且在同一条注释上,您不应该使用正则表达式解析HTML:请阅读关于此的更多信息。
$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);
}
}