preg_replace div(或任何东西)与 class=removeMe
只是尝试使用 preg_replace 删除一些元素,但无法使其一致工作。我想删除具有匹配类的元素。问题是元素可能有一个 ID 或多个类。
即该元素可以
<div id="me1" class="removeMe">remove me and my parent</div>
或者
<div id="me1" class="removeMe" style="display:none">remove me and my parent</div>
是否有可能做到这一点?
任何帮助表示赞赏!担。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我同意 MarcB 的观点。总的来说,在操作 HTML 时最好使用 DOM。但这里有一个基于 smottt 答案的正则表达式可能有效:
[^>]*
和[^<]*
而不是.*.在我的测试中,bar
.*?
不起作用。如果不匹配的 div 出现在匹配的 div 之前,则它将匹配第一个 div、中间的所有内容以及最后一个 div。例如,它错误地匹配整个字符串:hello
您也应该使用“m”修饰符,以便考虑换行符(请参阅此页面)。为了清楚起见,我添加了括号,但它们不是必需的。让我知道这是否有效。
编辑:实际上,没关系,“m”修饰符不会做任何事情。
EDIT2:改进了正则表达式,但如果 div 中有任何换行符,它仍然会失败。
I agree with MarcB. Overall, it's better to use a DOM when manipulating HTML. But here is a regex based on smottt's answer that might work:
[^>]*
and[^<]*
instead of.*
. In my testing,.*?
doesn't work. If a non-matching div comes before a matching div, it will match the first div, everything in between, and the last div. For example, it incorrectly matches against this entire string:<div></div><b>hello</b><div class="removeMe">bar</div>
You should use the "m" modifier too so that it takes line breaks into account (see this page).I added parenthesis for clarity, but they aren't needed. Let me know if this works or not.
EDIT: Actually, nevermind, the "m" modifier won't do anything.
EDIT2: Improved the regex, but it still fails if there are any newlines in the div.
虽然这对于正则表达式仍然可行,但使用例如 QueryPath 则要简单得多:
While this is still doable with regular expression, it's much simpler with e.g. QueryPath:
使用 preg_replace:
With preg_replace: