正则表达式匹配html标签之间长于x个字符的文本?

时间:2012-04-08 04:05:15

标签: html regex preg-match

我的任务是迁移您将遇到的最糟糕的HTML产品说明。它由表和段落的混合组成。大多数甚至不是100%有效的HTML,并且有许多Microsoft标签由MS Word提供。它充满了线条样式标签,其中大部分都依赖于你将看到的最疯狂的CSS规则。

基本上我已经意识到唯一使用的是文本的段落。我不能只抓取<p>代码,因为有时段落不使用它们,有时标题或单个单词都有自己的<p>标记。

所以我的问题是我可以匹配html标签之间的 x 字符长的文本吗?

理想情况下,它也会忽略<br/><br>

Here is a link以我正在处理的HTML为例

请注意,这只是我正在处理的描述,而不是整个页面。

2 个答案:

答案 0 :(得分:0)

此正则表达式的1组将匹配标记之间的n+个字符(在此示例中为n = 100):

<[^>]+>([^<]{100,})<[^>]+>

注意:

  • 我故意匹配匹配的结束标记(<([^>]+)>([^<]{100,})<\1>)因为OP的草率HTML - 标记是标记
  • 我避免使用lookbehind((?<=<[^>]+>))因为匹配是任意长度的,这可能导致回溯问题(某些语言,如java,甚至不支持它)。

答案 1 :(得分:0)

稍微扫描一下网站,看起来很多描述都不到100个字符。您可以尝试多遍方法,在第一次迭代中,您可以捕获“div id="tab1"”之后的第一个表中的所有内容。从那个起点开始,识别和消除 想要的部分可能更容易,而不是提取您想要的部分。