RegEx捕获多个重复可选字段?

时间:2017-03-15 17:29:51

标签: regex vb6 regex-group

RegEx相当新,请放轻松。我想知道你是否可以捕获多个重复的可选字段?例如,此URL具有多个RELATED元值字段。但有些网址只有一个元素,有些则有3个以上。以下RegEx将可选地仅捕获第一个元值。

我的源代码现在只需捕获少于4个metas,因此我可以在RegEx中粘贴重复:(((?!meta-value).)+meta-value">([^<]+))?来捕获前四个。

然而,我想知道是否有更好的方法。我考虑在单独的RegEx中捕获元数据,但它们与URL相关,所以我试图同时捕获它们。

示例RegEx:

<a href="([^"]+)(((?!meta-value).)+meta-value">([^<]+))?

示例文本(第一个URL有两个元值类别,第二个URL只有一个):

bla bla <a href="testurl.html"> bla bla <div id="meta-value">Category</div> bla bla bla <div id="meta-value">Diff Category</div> bla bla <a href="testurl2.html"> thsdlkjfh <div id="meta-value">Category2</div> bla bla bla 

http://www.regexpal.com/?fam=97173

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解了所需的结果,但如果您要查找每个div标记中每个<a>元素的内容,那么我建议您进行两次匹配。

第一个应该获取所有<a>标记及其内容:<a href="(.+?)".*?<\/a>如果您愿意,可以使用网址的捕获组

然后迭代刚刚创建的<a>标记列表,并使用此表达式来提取元部分:<div id="meta-value">(.*?)<\/div>

您可以使用这些表达式here

如果这不符合您的预期结果,请进一步澄清。