我只想在链接中的文本与术语完全匹配时才从字符串中删除链接(保留文本)。
我不确定这个正则表达式有什么问题,但它删除了很多文本。
$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
链接中删除与这些条款完全匹配的链接,而不是所有链接。
答案 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;