我需要从html中删除任何非YouTube托管的电影。最初的要求是删除所有电影,
<object.*object>
工作得很好。现在我基本上需要做同样的事情,但前提是对象标签中的东西不是托管在youtube上的。我需要一个正则表达式模式,该模式将匹配以“youtube”开头但不包含单词“youtube”的字符串。如果我需要这个可以解决所有可能的情况,我可能需要考虑更多的事情,但上面应该可以解决手头的工作。
我一直在玩负面的前瞻,但还没有能够让它发挥作用。以下是我尝试过的一些事情:
<object.*(?!youtube).*object>
- 匹配所有对象标签,因为*是贪婪的
<object.+?(?!youtube).+?object>
<object(?!youtube)*object>
还有很多其他的东西,只是进一步加强了我在黑暗中疯狂地刺伤这个。
这是在Java 1.6中
答案 0 :(得分:6)
尝试:
(?s)<object((?!youtube).)*?object>
(?s)
将导致DOT元字符匹配任何字符(包括换行符)<object
和object>
必须明确(?!youtube).
将首先检查是否可以“看到”youtube
,如果是这种情况,正则表达式将匹配任何字符((?!youtube).)*?
将匹配[3]零次或多次,不情愿地(“不贪婪”)请注意,使用正则表达式,可能会出现问题。要获得更强大的解决方案,请使用(x)HTML解析器迭代所有对象标记,并检查属性或您期望的内部html中是否存在“youtube”。
答案 1 :(得分:0)
怎么样让它不那么贪心? :) <object.*?(?!youtube).*?object>