Regular expression for nested tags (innermost to make it easier)(嵌套标签的正则表达式(最里面使它更容易))
问题描述
我对此进行了相当多的研究,但找不到如何将嵌套的 html 标签 与 属性匹配的工作示例.我知道可以匹配没有属性的平衡/嵌套最里面的标签(例如,正则表达式和将是 #<div[^>]*>(?:(?> [^<]+ ) |<(?!div[^>]*>))*?</div>
#x).
但是,我希望看到一个正则表达式模式,它可以找到带有属性的 html 标记对.
例子:基本上应该匹配
<div class="aaa">**<div class="aaa">** <div></div>**</div>** </div>而不是
<div class="aaa">**<div class="aaa">** <div>**</div>** </div></div>有人有什么想法吗?
出于测试目的,我们可以使用:http://www.lumadis.be/regex/test_regex.php
<小时>PS.Steven 在他的博客中提到了一个解决方案(实际上是在评论中),但它不起作用
http://blog.stevenlevithan.com/archives/match-innermost-html元素
$regex = '/ 解决方案 匹配 <div>
&</div>
标签,加上它们的属性 &内容:
#<div(?:(?!(<div|</div>)).)*</div>#s
这里的关键是 (?:(?!STRING).)*
是字符串,就像 [^CHAR]*
是字符一样.
来源:https://stackoverflow.com/a/6996274
<小时>PHP 中的示例:
$match) {回声************".
".$匹配."
";}
输出:
************<div id="3">在 3</div>************<div id="5">在 5</div>
I researched this quite a bit, but couldn't find a working example how to match nested html tags with attributes. I know it is possible to match balanced/nested innermost tags without attributes (for example a regex for and would be #<div[^>]*>(?:(?> [^<]+ ) |<(?!div[^>]*>))*?</div>
#x).
However, I would like to see a regex pattern that finds an html tag pair with attributes.
Example: It basically should match
<div class="aaa"> **<div class="aaa">** <div> <div> </div> **</div>** </div>
and not
<div class="aaa"> **<div class="aaa">** <div> <div> **</div>** </div> </div>
Anybody has some ideas?
For testing purposes we could use: http://www.lumadis.be/regex/test_regex.php
PS. Steven mentioned a solution in his blog (actually in a comment), but it doesn't work
http://blog.stevenlevithan.com/archives/match-innermost-html-element
$regex = '/<div[^>]+?ids*=s*"MyID"[^>]*>(?:((?:[^<]++|<(?!/?div[^>]*>))+)|(<div[^>]*>(?>(?1)|(?2))*</div>))?</div>/i';
解决方案 Matching innermost matching pairs of <div>
& </div>
tags, plus their attributes & content:
#<div(?:(?!(<div|</div>)).)*</div>#s
The key here is that (?:(?!STRING).)*
is to strings as [^CHAR]*
is to characters.
Credit: https://stackoverflow.com/a/6996274
Example in 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 "************" . "
" . $match . "
";
}
Outputs:
************
<div id="3">
in 3
</div>
************
<div id="5">
in 5
</div>
这篇关于嵌套标签的正则表达式(最里面使它更容易)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:嵌套标签的正则表达式(最里面使它更容易)
基础教程推荐
猜你喜欢
-
如何使用TypeScrip将固定承诺数组中的项设置为可选
2022-01-01
-
自定义 XMLHttpRequest.prototype.open
2022-01-01
-
Chart.js 在线性图表上拖动点
2022-01-01
-
html表格如何通过更改悬停边框来突出显示列?
2022-01-01
-
直接将值设置为滑块
2022-01-01
-
Vue 3 – <过渡>渲染不能动画的非元素根节点
2022-01-01
-
如何使用JIT在顺风css中使用布局变体?
2022-01-01
-
用于 Twitter 小部件宽度的 HTML/CSS
2022-01-01
-
Electron 将 Node.js 和 Chromium 上下文结合起来意味着
2022-01-01
-
我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗?
2022-01-01