Dav*_*ave 2 html regex tags nested
我对此进行了相当多的研究,但找不到如何将嵌套 html 标签与属性相匹配的工作示例。我知道可以匹配没有属性的平衡/嵌套最内层标签(例如,and 的正则表达式为 #<div\b[^>]*>(?:(?> [^<]+ ) |<(?!div\b[^>]*>))*?</div>#x)。
但是,我希望看到一个正则表达式模式,它可以找到带有属性的 html 标签对。
示例:它基本上应该匹配
<div class="aaa"> **<div class="aaa">** <div> <div> </div> **</div>** </div>
Run Code Online (Sandbox Code Playgroud)
并不是
<div class="aaa"> **<div class="aaa">** <div> <div> **</div>** </div> </div>
Run Code Online (Sandbox Code Playgroud)
有人有一些想法吗?
出于测试目的,我们可以使用: http: //www.lumadis.be/regex/test_regex.php
附言。Steven在他的博客中提到了一个解决方案(实际上是在评论中),但它不起作用
http://blog.stevenlevithan.com/archives/match-innermost-html-element
$regex = '/<div\b[^>]+?\bid\s*=\s*"MyID"[^>]*>(?:((?:[^<]++|<(?!\/?div\b[^>]*>))+)|(<div\b[^>]*>(?>(?1)|(?2))*<\/div>))?<\/div>/i';
Run Code Online (Sandbox Code Playgroud)
匹配最里面的<div>&</div>标签对,以及它们的属性和内容:
#<div(?:(?!(<div|</div>)).)*</div>#s
这里的关键是(?:(?!STRING).)*对于字符串就像[^CHAR]*对于字符一样。
信用: https: //stackoverflow.com/a/6996274
PHP 中的示例:
<?php
$text = <<<'EOD'
<div id="1">
in 1
<div id="2">
in 2
<div id="3">
in 3
</div>
</div>
</div>
<div id="4">
in 4
<div id="5">
in 5
</div>
</div>
EOD;
$matches = array();
preg_match_all('#<div(?:(?!(<div|</div>)).)*</div>#s', $text, $matches);
foreach ($matches[0] as $index => $match) {
echo "************" . "\n" . $match . "\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
************
<div id="3">
in 3
</div>
************
<div id="5">
in 5
</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14461 次 |
| 最近记录: |