正则表达式捕获多个重复的可选字段?

RegEx Capture Multiple Repeating Optional Fields?

刚接触 RegEx,请放轻松。我想知道您是否可以捕获多个重复的可选字段?例如,这个 URL 有多个 RELATED 元值字段。但是有些 URL 只有一个 meta,其他人有 3+。下面的 RegEx 将选择性地只捕获第一个元值。

我的源代码现在只需要捕获不到 4 个元数据,因此我只需在 RegEx 中粘贴 repeating: (((?!meta-value).)+meta-value">([^<]+))? 即可捕获前四个。

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

正则表达式示例:

<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

感谢您的帮助。

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

第一个应该获取所有 <a> 标签及其内容:<a href="(.+?)".*?<\/a> 如果需要

,可以使用 url 的捕获组

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

您可以尝试使用这些表达式 here

如果这不能满足您期望的结果,请进一步说明。