找到某个<span>之间的重复

时间:2015-11-08 09:00:10

标签: java android regex

我有以下HTML字符串:

<span class='together'>line one,<br><span class='indent'>line two.</span><br>Line three,<br><span class='indent'>line four,<br>line five,<br>line six,<br>line seven;<br>line eight.<br>Line nine;<br>line ten,<br>line eleven,<br>line twelve.</span><br>Line thriteen,<br><span class='indent'>line fourteen,<br>line fifteen,<br>line sixteen,<br>line seventeen,<br>line eighteen.</span></span>

我正在尝试找到一个正则表达式,它会找到<br>和它关闭<span class='indent'>之间的所有</span><span class='together'>封装整个刺痛,应该被忽略。

目前,我能做的最好的事情是:<span class='indent'>.*?(<br>).*?<\/span>根本不起作用。第一个<br>此抓取位于<span>之外,然后它会跳过我想要的其他<br>See here

这可能吗?我应该使用<span class='indent'>(.*?)\<\/span>,然后再解析捕获的组吗?

正如你所知,我的正则表达式知识非常有限。

1 个答案:

答案 0 :(得分:1)

在你写的其他答案的评论中

  

跨度之间的内容只包含<br>标记,而不包含其他HTML ...

如果<br>尝试使用lookbehind之前只有<span class='indent'>个标签/没有其他标签。只允许有限的重复,因此需要设置限制跨度内的最大长度。

(?s)(?<=<span class='indent'>(?:(?!</?span).){0,9999}?)<br>

刚刚选择9999,您可能需要更高的值,具体取决于输入。 Demo at regexplanet(点击Java)。 (?!</?span).负向前瞻用于在向后看时不跳过跨度。

这仅适用于您的样本之类的数据,而不适用于任何嵌套的跨度。在这种情况下使用解析器。