正则表达式:匹配不包含特定文本的HTML元素

时间:2010-02-18 20:08:35

标签: java regex

我需要从html中删除任何非YouTube托管的电影。最初的要求是删除所有电影,

<object.*object>

工作得很好。现在我基本上需要做同样的事情,但前提是对象标签中的东西不是托管在youtube上的。我需要一个正则表达式模式,该模式将匹配以“youtube”开头但不包含单词“youtube”的字符串。如果我需要这个可以解决所有可能的情况,我可能需要考虑更多的事情,但上面应该可以解决手头的工作。

我一直在玩负面的前瞻,但还没有能够让它发挥作用。以下是我尝试过的一些事情:

<object.*(?!youtube).*object> - 匹配所有对象标签,因为*是贪婪的

<object.+?(?!youtube).+?object>

<object(?!youtube)*object>
还有很多其他的东西,只是进一步加强了我在黑暗中疯狂地刺伤这个。

这是在Java 1.6中

2 个答案:

答案 0 :(得分:6)

尝试:

(?s)<object((?!youtube).)*?object>
  1. (?s)将导致DOT元字符匹配任何字符(包括换行符)
  2. <objectobject>必须明确
  3. (?!youtube).将首先检查是否可以“看到”youtube,如果是这种情况,正则表达式将匹配任何字符
  4. ((?!youtube).)*?将匹配[3]零次或多次,不情愿地(“不贪婪”)
  5. 请注意,使用正则表达式,可能会出现问题。要获得更强大的解决方案,请使用(x)HTML解析器迭代所有对象标记,并检查属性或您期望的内部html中是否存在“youtube”。

答案 1 :(得分:0)

怎么样让它不那么贪心? :) <object.*?(?!youtube).*?object>