剥离特定HTML元素及其内容之外的字符串内容

时间:2014-03-19 20:13:57

标签: php regex expression

我正在寻找一种PHP解决方案来剥离除特定HTML元素及其内容之外的字符串内容。

以下是一个例子:

原始字符串

<span class="vmshipment_name">Fragtmand</span>
<span class="vmshipment_description">Vi leverer i hele landet. Alle produkter fra Jabo, herunder hytter, havehegn osv. transporteres fra Sverige.<br>
Leveringstiden er ca. 12-18 dage.</span>

现在,这就是我要提取的内容

<span class="vmshipment_name">Fragtmand</span>

所以,我正在寻找一个PHP表达式去除/删除字符串中的所有内容,除了类名为“vmshipment_name”的span-element

有没有人知道这样做的方法?

3 个答案:

答案 0 :(得分:1)

请尝试DomDocument课程:

<?php

$html = '<span class="vmshipment_name">Fragtmand</span>
<span class="vmshipment_description">Vi leverer i hele landet. Alle produkter fra Jabo, herunder hytter, havehegn osv. transporteres fra Sverige.<br>
Leveringstiden er ca. 12-18 dage.</span>';

$dom = new DomDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$results = $xpath->query("//*[@class='vmshipment_name']");

echo $dom->saveHTML($results->item(0));

Output

<span class="vmshipment_name">Fragtmand</span>

答案 1 :(得分:0)

取决于您拥有的其他用例。对于您给出的简单示例,我将使用正则表达式。对于更一般的用例类,您可能希望使用DOM解析器,如PHP DOM

答案 2 :(得分:0)

请注意,您应该逃避并消毒您的输入。

如果您只想匹配一个,也可以使用preg_match。以下代码与所有代码相匹配。

   <?php
        $test_string = '<span class="vmshipment_name">Fragtmand</span>
            <span class="vmshipment_description">Vi leverer i hele landet. Alle   produkter fra Jabo, herunder hytter, havehegn osv. transporteres fra Sverige.<br>
            Leveringstiden er ca. 12-18 dage.</span>';

        preg_match_all('@<span.+class="vmshipment_name".+</span>@', $test_string, $matches);

        print_r($matches);
   ?>

输出:

Array
(
    [0] => Array
        (
            [0] => <span class="vmshipment_name">Fragtmand</span>
        )

)