在具有属性的标签之间匹配文本的最佳方法

1 html php regex parsing dom

我正在尝试获取两个标签之间的所有文本。文档中将有多个标签对,因此我需要获取所有条目。

这是一个文本示例

<pre class="code-class" id="code-error">
function error_notice() {
    ?>
    <div class="error notice">
        <p><?php _e( 'There has been an error', 'my_textdomain' ); ?></p>
    </div>
    <?php
}
add_action( 'admin_notices', 'my_error_notice' );
</pre>
Run Code Online (Sandbox Code Playgroud)

如您所见,<pre>标签内的嵌套代码本身具有 HTML,但我需要捕获<pre>标签之间的所有文本。我也想解析属性classid例如。

我尝试使用解析此文本 DOMDocument

$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$preTags = $dom->getElementsByTagName('pre');
foreach($preTags as $pre)
{
Run Code Online (Sandbox Code Playgroud)

但是嵌套的 HTML 被解析为单独的节点。

我也尝试使用正则表达式,但无法解析所有可能的属性。

请建议解析和考虑所有可能情况的最佳方法。

Riz*_*man 5

使用它来捕获 pre 标签内的所有内容:

<pre.*?>(.*?)<\/pre>
Run Code Online (Sandbox Code Playgroud)

捕获组 1 包含您要查找的内容

在整个字符串上尝试此正则表达式,并获取捕获组 1 中每个匹配项的类和 ID

class="(.*?)"|id="(.*?)"
Run Code Online (Sandbox Code Playgroud)

在这里试试

在此处运行 php 示例