preg_replace带有<a> with some exception</a>的文本链接

时间:2012-06-01 06:21:08

标签: php regex hyperlink href

<?php
// I have a string, something like this:
$string = '
    Lorep ipsum <a href="http://www.example.com">example</a> lorem ipsum
    lorem ipsum http://www.example.com/index.php?param1=val&param2=val lorem ipsum
';
// I need to do some magick with preg_replace and get string like this:
$string = '
    Lorep ipsum <a href="http://www.example.com" target="_blank">example</a> lorem ipsum
    lorem ipsum <a href="http://www.example.com/index.php?param1=val&param2=val" target="_blank">http://www.example.com/index.php?param1=val&param2=val</a> lorem ipsum
';

?>

基本上,我想要链接未包含在&lt; a&gt;&lt; / a&gt;中的文字中的网址。并将target =“_ blank”添加到那些。

任何人都可以帮我吗?

4 个答案:

答案 0 :(得分:2)

$string = preg_replace("/<a(.*?)>/", "<a$1 target=\"_blank\">", $string);

这将添加一个已设置的额外target=\"_blank\"

$string = preg_replace("/<a (href=".*?").*?>/", "<a $1 target="_blank">", $string);

这将确保在网址中只添加一个target="_blank"

示例: - http://www.phpliveregex.com/p/6qG

答案 1 :(得分:1)

这将添加目标:

$string = preg_replace("/<a(.*?)>/", "<a$1 target=\"_blank\">", $string);

这是检测网址并将其转换为链接的粗略方式(这很脆弱):

$string = preg_replace("/(http[^\ ]+)/", "<a href=\"$1\" target=\"_blank\">$1</a>", $string);

答案 2 :(得分:0)

首先,我会使用一些XML / HTML处理库,在标签之间获取文本,然后使用简单的正则表达式:

PHP validation/regex for URL

将所有网址设为链接。

答案 3 :(得分:0)

$result = preg_replace(
  "/(?<![\>https?:\/\/|href=\"'])(?<http>(https?:[\/][\/]|www\.)([a-z]|[A-Z]|[0-9]|[\/.&?= ]|[~])*)/",
  "<a href=\"$1\">$1</a>",
  $string
);