2015-11-08 26 views
3

我有以下的HTML字符串:查找重复<br>'s之间有一定<span>

<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

通常,不要使用正则表达式来解析HTML,请使用解析器。 –

+9

[**不要用REGEX **分析HTML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –

+0

你使用哪种语言? – hjpotter92

回答

1

在其他答案的评论你写

跨度之间的内容将只有在它<br>标签,并没有其他的HTML ...

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

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

刚捡到的9999,你可能会因输入需要更高的价值。 Demo at regexplanet(点击Java)。 (?!</?span).当向后看时,负向前视用于不跳过一个跨度。

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

+0

感谢您的工作冒泡泡沫。我将其标记为正确的答案,因为它确实符合我的要求。然而解析器可能是解决我的问题的“正确”方法。事实上,我最终使用正则表达式来查找我的缩进范围的内容,然后做了一些简单的查找和替换处理
的 – Ampers

+1

不客气@Ampers,谢谢!听起来就像你找到了处理它的最佳方式。那么如果解析器或正则表达式 - 我认为这取决于问题,如果解析任意的HTML或你自己的。 –

相关问题