Php preg_替换与其他规则冲突的正则表达式
我这里有这个Php preg_替换与其他规则冲突的正则表达式,php,regex,preg-replace,Php,Regex,Preg Replace,我这里有这个 <? $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 h
<? $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']));?>
前两个假设是将带有@和#的任何内容转换为链接。这显然是针对twitter的。但是第三个应该是把任何有http或www的东西变成一个链接。但这似乎与前两个打乱联系相冲突
如何使第三个链接与http或www链接不发生冲突?这充其量只是一种黑客行为,但您可以尝试以下方法:
<? $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>'
); ?>
扭转顺序,首先修复链接,然后仅替换
@
和#
句柄,如果它们前面没有
(如果它们已经在锚定标记中,则会是这样)。这最多只能算是一个黑客行为,但您可以尝试以下方法:
<? $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>'
); ?>
扭转顺序,首先修复链接,然后仅替换
@
和#
句柄,如果它们前面没有
(如果它们已经在锚定标记中,则会是这样)。@soniccol:基本上,是的。(?)
只是额外的预防措施。@soniccol:基本上是的。(?)
只是额外的预防措施。