PHP正则表达式:忽略HTML的结束标记,如果

PHP正则表达式:忽略HTML的结束标记,如果,php,html,regex,Php,Html,Regex,我似乎无法让这个工作,我希望得到一些帮助 我正在尝试捕获特定div的内容(请保存DOM talk,出于这个特定目的,它实际上没有发挥作用。) 问题是,如果在同一行中有另一个div前面有属性,我似乎无法让它工作。如果(.*)/mi之间没有,我尝试只指定匹配项 (半)工作示例:试试看 /)+?class=“myClass”。*?>(.*)/si 您不能用正则表达式解析[X]HTML。因为无法用正则表达式解析HTML 正则表达式。Regex不是一个可以用来正确解析HTML的工具 见: 我建议使用PH

我似乎无法让这个工作,我希望得到一些帮助

我正在尝试捕获特定
div
的内容(请保存DOM talk,出于这个特定目的,它实际上没有发挥作用。)

问题是,如果在同一行中有另一个
div
前面有属性,我似乎无法让它工作。如果
(.*)/mi之间没有
,我尝试只指定匹配项
(半)工作示例:

试试看

/)+?class=“myClass”。*?>(.*)/si

您不能用正则表达式解析[X]HTML。因为无法用正则表达式解析HTML 正则表达式。Regex不是一个可以用来正确解析HTML的工具

见:

我建议使用PHP解析XML和HTML。它的语法基本上与jQuery相同,只是在服务器端。

您可以使用以下方法(简单方式):

~]+?class=“myClass”[^>]*>(.*?)si
或者这样(如果您有很多属性,则更有效):

~[^>c]++\Bc | c(?!lass=)+class=“myClass”[^>]*+>(.*)~si

请注意,如果您的div标记包含另一个div标记,则这些模式不起作用。

为什么要在HTML上使用regex?从技术上讲,我是在一个PHP字符串上使用它,该字符串通过post通过ajax传递给新版本的CMS。我向你保证,这是一个很好的理由。请详细说明
(?:(?!>)+?
?为什么
anychar和
+?
是编写类级
[^>]+
的一种奇特方式,但类不会做的是
(?:(?!一些垃圾字符串)。+
。另外,
是必要的,
[^>]
也不是完全正确的,但这是另一天需要一个15页的正则表达式。所有的
*?
也都不正确,我想我应该从一些基础开始。这些正则表达式中的各种各样的东西。许多问题,如
[^>]*
之间的结束标记,它是无止境的,但可行的。大多数人只是想要一个快速而肮脏的解决方案,他们没有意识到隐藏的格查的真实性。这些无休止的“if and but”问题是我很少使用它的原因,但它在解析小字符串时非常方便。我相信最终一切都会有意义的。谢谢就我而言,这种特殊的解决方案可能是唯一的办法。在本例中使用DOM,依我看,是非常不方便的。99.9%的时间我同意这可能会引起问题。这种用法将是.1%,因此我请求在这个主题上省去我的时间。@kcdwayne我不同意:你永远不应该使用正则表达式来解析HTML。简单使用。这真的很容易,当你理解它的时候——边做边学。我确实理解DOM,并且可以很好地遍历它。关键是,我所做的就是丢弃一个用于保护重要PHP字符串的bogey容器。我这样做是为了降低新版本CMS中的安全风险,这样我就可以消除可能插入的任何恶意PHP,同时保护我自己的CMS。您只看到了一个概述问题的片段。我不想要讲座,我想要一个正则表达式问题的解决方案。链接问题的第一个答案很聪明,我已经看过好几次了。
/<div(?!>).*?class="myClass".*?>(.*?)<\/div>/mi
~<div[^>]+?class="myClass"[^>]*>(.*?)</div>~si
~<div(?>[^>c]++|\Bc|c(?!lass=))+class="myClass"[^>]*+>(.*?)</div>~si