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

Rya*_*ins 2 java regex

我需要从html中删除任何非YouTube托管的电影.最初的要求是删除任何电影,为此

<object.*object>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

<object(?!youtube)*object>
Run Code Online (Sandbox Code Playgroud)

加上很多其他的东西,只是进一步加强了我在黑暗中疯狂地刺伤这一个.

这是在Java 1.6中

Bar*_*ers 6

尝试:

(?s)<object((?!youtube).)*?object>
Run Code Online (Sandbox Code Playgroud)
  1. (?s) 将导致DOT元字符匹配任何字符(包括换行符)
  2. <object并且object>必须清楚
  3. (?!youtube).将首先检查是否youtube可以"看到",如果是这种情况,正则表达式将匹配任何字符
  4. ((?!youtube).)*? 将匹配[3]零次或多次,不情愿地("不贪婪")

请注意,使用正则表达式,可能会出现问题.要获得更强大的解决方案,请使用(x)HTML解析器迭代所有对象标记,并检查属性或内部html中是否存在"youtube".