<a> tag replacement</a>的正则表达式

时间:2010-08-03 10:58:45

标签: php html regex preg-replace

我是正则表达式的新手,但我正在努力了解它。我想删除html文本的标记,只允许内部文本。这样的事情:

Original: Lorem ipsum <a href="http://www.google.es">Google</a> Lorem ipsum <a href="http://www.bing.com">Bing</a>
Result:  Lorem ipsum Google Lorem ipsum Bing

我正在使用此代码:

$patterns = array( "/(<a href=\"[a-z0-9.:_\-\/]{1,}\">)/i", "/<\/a>/i");
$replacements = array("", "");

$text = 'Lorem ipsum <a href="http://www.google.es">Google</a> Lorem ipsum <a href="http://www.bing.com">Bing</a>';
$text = preg_replace($patterns,$replacements,$text);

它有效,但我不知道这段代码是更高效还是更易读。

我能以某种方式改进代码吗?

5 个答案:

答案 0 :(得分:7)

在您的情况下,PHP的strip_tags()应该完全按照您的需要进行,而无需使用正则表达式。如果您只想删除特定标记(默认情况下strip_tags()无法执行此操作),则User Contributed Notes中会有一个函数。

通常,正则表达式不适合解析HTML。最好使用Simple HTML DOMPHP's built-in parsers之一的DOM解析器。

答案 1 :(得分:5)

答案 2 :(得分:2)

如果您的内容仅包含锚标记,则strip_tags可能更容易使用。

如果a和href之间存在虚假空格,或者标签中有任何其他属性,则不会替换preg_replace。

答案 3 :(得分:2)

在这种情况下,使用正则表达式不是一个好主意。话虽如此:

<?php
    $text = 'Lorem ipsum <a href="http://www.google.es">Google</a> Lorem ipsum <a href="http://www.bing.com">Bing</a>';
    $text = preg_replace(
        '@\\<a\\b[^\\>]*\\>(.*?)\\<\\/a\\b[^\\>]*\\>@',
        '\\1',
        $text
    );
    echo $text;
    // Lorem ipsum Google Lorem ipsum Bing
?>

这是一个非常简单的正则表达式,它不是防弹。

答案 4 :(得分:0)