1

所以我在这里

<? $regex = array('/@(\w+)/','/#(\w+)/','/((www|http:\/\/)[^ ]+)/');
    $replace = array(
    '<a href="https://www.twitter.com/$1">@$1</a>',
    '<a href="https://twitter.com/#!/search/%23$1">#$1</a>',
    '<a href="\1">\1</a>'
); ?>

<?= preg_replace($regex,$replace,stripslashes($row['tweet_text']));?>

前两个假设将带有 @ 和 # 的任何内容转换为链接。这显然是针对推特的。但是第三个应该将带有 http 或 www 的任何内容转换为链接。但这似乎与前两个弄乱了链接相冲突。

我怎样才能让第三个链接在不与其他两个冲突的情况下创建 http 或 www 链接?

4

1 回答 1

1

这充其量是hacky,但你可以试试这个:

<? $regex = array('/((www|http:\/\/)[^ ]+)/', '/(?<!>)@(\w+)/', '/(?<!>)#(\w+)/');
    $replace = array(
    '<a href="\1">\1</a>',
    '<a href="https://www.twitter.com/$1">@$1</a>',
    '<a href="https://twitter.com/#!/search/%23$1">#$1</a>'
); ?>

翻转顺序,首先修复链接,然后仅在它们前面没有 a 的情况下替换@和处理(如果它们已经在锚标记内,它们就是这样)。#>

于 2012-09-18T07:06:20.690 回答