REGEX:用于检测不在<对象>标签内的<嵌入>标签的模式


REGEX: Pattern to detect <embed> tags that are not inside <object> tags?

我正在尝试获取动态生成的页面上的视频总数。为此,我解析页面的html并搜索所有<object><iframe><embed>标签。除了视频嵌入代码外,该页面不会包含任何其他类型的 iframe 内容,因此我可以确定任何 iframe 标签都是视频。问题是一些嵌入代码,例如Hulu,在<object>标签内有<embed>标签。所以对于我目前的正则表达式:

'/(<iframe|<object|<embed)/i'

此 Hulu 嵌入代码被视为 2 个视频而不是一个:

<object id="videoplayer1" width="728" height="407">
   <param name="movie" value='http://www.hulu.com/embed/7qXAa2z1zXKPMw4mBakrRw'></param>
   <param name="allowFullScreen" value="true"></param>
   <param name="allowScriptAccess" value="never"></param>
   <embed src='http://www.hulu.com/embed/7qXAa2z1zXKPMw4mBakrRw' type="application/x-shockwave-flash" allowfullscreen="true" width="728" height="407" allowscriptaccess='never'></embed>
</object>

我不想搜索所有嵌入标签,我只想搜索未被<object>标签封装的标签。所以上面的 hulu 将被避免,但像这样的一个将被计算在内:

<embed src="http://www.ebaumsworld.com/player.swf" allowScriptAccess="always" flashvars="id1=81748652" wmode="opaque" width="567" height="345" allowfullscreen="true" />

REGEX模式会是什么样子,我正在使用PHP。

带有xpath的XML解析器也是我的选择