我必须在php中获取一个类div的所有内容,我有这个:
<div class="main">(.*?)</div>
但是我对div孩子有问题。
<div class="main">asdasd<div>jkjk</div></div>
结果是:
<div class="main">asdasd<div>jkjk</div>
我正在尝试(?(?= regex)然后| else)但我无法使其工作¯\ _(ツ)_ /¯
答案 0 :(得分:2)
Regexp最初是一种匹配常规语言的工具。
常规语言在有效的识别算法和表达能力之间取得了相当好的平衡。很容易认为常规语言允许您检测所有有趣的子串。
但是常规语言存在限制。与您的问题特别相关的是匹配的Paranthesises语言不规则。 - 这意味着不存在与匹配的paranthesises语言匹配的正则表达式。
除了以下内容之外,这将是讨论的结束;随着时间的推移,正则表达式的语言已经扩展,增加了它超越常规语言的表达能力。特别是PHP提供了递归正则表达式运算符(?R)
,它允许您搜索匹配的paranthesises,或匹配<div>
和</div>
标记。
您可以查看此运算符的语法并根据您的需要进行调整。 - 但是你会浪费你的时间。解析html是一个已经解决的问题,使用DOM解析器将更耐用,更容易扩展,并且在以后返回代码时为其他编码器或自己更容易理解。
答案 1 :(得分:1)
你不应该用正则表达式解析html。它肯定会在某处失败。对于你的问题,你可以使用php的 Recursive 功能。
<div\b(?:(?R)|(?:(?!<\/?div).))*<\/div>
参见演示。