我有以下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>
,然后再解析捕获的组吗?
正如你所知,我的正则表达式知识非常有限。
答案 0 :(得分:1)
在你写的其他答案的评论中
跨度之间的内容只包含
<br>
标记,而不包含其他HTML ...
如果<br>
尝试使用lookbehind之前只有<span class='indent'>
个标签/没有其他标签。只允许有限的重复,因此需要设置限制跨度内的最大长度。
(?s)(?<=<span class='indent'>(?:(?!</?span).){0,9999}?)<br>
刚刚选择9999,您可能需要更高的值,具体取决于输入。 Demo at regexplanet(点击Java)。
(?!</?span).
负向前瞻用于在向后看时不跳过跨度。
这仅适用于您的样本之类的数据,而不适用于任何嵌套的跨度。在这种情况下使用解析器。