Php 查找HTML中最内部的文本

Php 查找HTML中最内部的文本,php,html,regex,Php,Html,Regex,在PHP中,什么是正则表达式来查找HTML字符串的最内部文本?HTML元素的树只有一个左键,并且只能有一系列分支 示例,其中结果为XXX(这不是包含新行的单个字符串;每行将执行regex): XXX XXX 布拉XXX 这不需要假设: <a>XXX</a><a>XXX</a> <a><</a> <a>></a> XXXXXX 我认为这应该是类似于>(.*)的东西,试试这个: >

在PHP中,什么是正则表达式来查找HTML字符串的最内部文本?HTML元素的树只有一个左键,并且只能有一系列分支

示例,其中结果为XXX(这不是包含新行的单个字符串;每行将执行regex):

XXX
XXX
布拉XXX
这不需要假设:

<a>XXX</a><a>XXX</a>
<a><</a>
<a>></a>
XXXXXX
我认为这应该是类似于
>(.*)的东西,试试这个:

>((?:(?!<).)+?)<\/

你可以用这样的东西

>([^><]+)<\/

([^>您似乎知道在将正则表达式与HTML一起使用时可能遇到的问题,因此请将正则表达式的答案作为学习练习,如果您必须将其与任意HTML代码一起使用,请在生产中使用DOM解析


IMHO,如果您知道自己在做什么,也就是说,您完全控制生成的HTML,并且您知道所有的
为什么要进行向下投票?有什么不对?使用正则表达式解析上下文无关语言(如HTML)无意义。使用。@JiriHrazdil这不是解析html,这只是从更大的上下文中提取html的一部分。任务只关心是否有内部元素,而不尝试读取标记、平衡标记、渲染标记或以其他方式使用标记进行查找。解析!=查找。@melwil:OP想要查找inn大多数文本。尽管使用了find这个词,但最里面的部分指的是结构(HTML元素树),这意味着解析。@JiriHrazdil我们可以就此争论不休,但仅仅是对链接的纠缠和对正则表达式和解析的憎恨本身就是愚蠢的。在大多数情况下,人们希望在这里执行类似OP的操作,他们无论如何都在使用过程生成的代码。如果愿意,可以链接警告,但没有解决方案是错误的ime.Regex是一个强大的工具,想要学习如何使用它是非常有意义的。我同意学习的渴望应该与使用最佳实践的知识相调和,但不要因为“这就是所谓的“同意就是最好的”而放弃解决方案。@maverick mrt是否可以只使用
>([^谢谢。这甚至适用于所有的叶子!我发誓,所以请帮助我上帝,我会考虑使用DOM解析器,如果事情变得更复杂;-正如我所提到的,使用DOM强制性地使用任意HTML你无法控制。
<a>XXX1</a>
<a some-attr="bla" some-attr2="bla2"><b>XXX2</b></a>
<a>   bla   <b>XXX3</b></a>
XXX1
XXX2
XXX3
>([^><]+)<\/
$html = <<<DATA
<a>XXX</a>
<a some-attr="bla" some-attr2="bla2"><b>XXX</b></a>
<a>   bla   <b>XXX</b></a>
DATA;
echo preg_replace('~(<(\w+)[^<]*?>)[^<]*(<\/\2>)~', '$1YYY$3', $html);
<a>YYY</a>
<a some-attr="bla" some-attr2="bla2"><b>YYY</b></a>
<a>   bla   <b>YYY</b></a>