我正在尝试从 HTML 输入中检索 iframe
标签和属性。
示例输入
<div class="1"><iframe width="100%" height="427px" src="https://www.youtube.com/embed/1" frameborder="0" allowfullscreen=""></iframe></div>
<div class="2"><iframe width="100%" height="427px" src="https://www.youtube.com/embed/2" frameborder="0" allowfullscreen=""></iframe></div>
我一直在尝试使用以下正则表达式收集它们:
<iframe.+?width=[\"'](?<width>.*?)[\"']?height=[\"'](?<height>.*?)[\"']?src=[\"'](?<src>.*?)[\"'].+?>
这导致
这正是我想要的格式。
问题是,如果 HTML 属性的顺序不同,则此正则表达式将不起作用。
有什么方法可以修改此正则表达式以忽略属性顺序并返回分组在 Matches
中的 iframe
以便我可以遍历它们?
最佳答案
这是一个忽略属性顺序的正则表达式:
(?<=<iframe[^>]*?)(?:\s*width=["'](?<width>[^"']+)["']|\s*height=["'](?<height>[^'"]+)["']|\s*src=["'](?<src>[^'"]+["']))+[^>]*?>
C# 示例代码:
var rx = new Regex(@"(?<=<iframe[^>]*?)(?:\s*width=[""'](?<width>[^""']+)[""']|\s*height=[""'](?<height>[^'""]+)[""']|\s*src=[""'](?<src>[^'""]+[""']))+[^>]*?>");
var input = @"YOUR INPUT STRING";
var matches = rx.Matches(input).Cast<Match>().ToList();
输出:
关于c# - 用于查找 iframe 标记和检索属性的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29893444/