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

时间:2016-11-15 12:19:58

标签: php html 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>

正如您所看到的,<pre>标记内的嵌套代码具有HTML本身,但我需要捕获<pre>标记之间的所有文本。另外,我想解析属性classid

我尝试使用DOMDocument

解析此文本
$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$preTags = $dom->getElementsByTagName('pre');
foreach($preTags as $pre)
{

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

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

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

2 个答案:

答案 0 :(得分:3)

使用此功能捕获预标记内的所有内容:

<pre.*?>(.*?)<\/pre>

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

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

class="(.*?)"|id="(.*?)"

Try here

Run the php sample here

答案 1 :(得分:1)

$input_lines= YOUR CODE;
preg_match_all("/<pre[^>]*>(.*?)<\/pre>/is", $input_lines, $output_array);
print_r($output_array);

demo http://www.phpliveregex.com/p/hSB