从特定文本的字符串中删除链接

时间:2018-01-25 18:59:23

标签: php regex

我只想在链接中的文本与术语完全匹配时才从字符串中删除链接(保留文本)。

我不确定这个正则表达式有什么问题,但它删除了很多文本。

$terms = ["justo pulvinar"];
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"#/app/292\">quam nibh, faucibus</a> quam nibh, faucibus eget tortor eget, finibus semper justo. aliquet <a href=\"#/app/212\">justo pulvinar</a>, elit.";
foreach ($terms as $term) {
    $string = preg_replace('/<a href=\"(.*?)\">('.$term.')<\/a>/', "\\2",$string);
 }
echo $string;

编辑也许我不够清楚,我有一个$terms数组有一个原因:我想要从$string链接中删除与这些条款完全匹配的链接,而不是所有链接。

3 个答案:

答案 0 :(得分:2)

除了更换操作外,一切看起来都不错。这个对我有用:

$string = preg_replace('/<a [^>]*>'.$term.'<\/a>/', $term, $string)

在这里,我们匹配<a及其之后的所有字符>,因为a标记的属性与操作无关。然后,我们希望看到我们正在处理的术语以及结束a标记。

仅用术语替换所有内容。我没有使用反向引用,因为字符串值应该没有变化。反向引用可能有用的情况是,如果案例是可变的并且需要保留。

答案 1 :(得分:0)

$terms = ["justo pulvinar"];
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"#/app/292\">quam nibh, faucibus</a> quam nibh, faucibus eget tortor eget, finibus semper justo. aliquet <a href=\"#/app/212\">justo pulvinar</a>, elit.";
foreach ($terms as $term) {
$string = strip_tags($term);
echo $string;
}

答案 2 :(得分:0)

我尝试了一些regExr并发现了一些我觉得它适合你的东西

    $terms = ["justo pulvinar"];
    $string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"#/app/292\">quam nibh, faucibus</a> quam nibh, faucibus eget tortor eget, finibus semper justo. aliquet <a href=\"#/app/212\">justo pulvinar</a>, elit.";
    $string = preg_replace('/<a\s+(?:[^>]*?\s+)?href=([\'"])(.*?)\1>/', "", $string);
    echo $string;