$sort['登山协会'] = 'http://www.8888.com';
$sort['登山'] = 'http://bbs.8888.com';
$sort['8888'] = 'http://www.8888.com';
$str = "登山的人和登山协会这是要做替换的一段文字.";
echo '元字符串:'.$str.'<br>' ;
foreach($sort as $k=>$v){
$href = '';
$href = "<a href='".$v."' target=_blank><font color=red><b>".$k."</b></font></a>";
$str = preg_replace("/".$k."(?![^<>]*(<\/a> ¦>))/i",$href,$str);
}
代码如上
就是先处理"登山协会"然后处理"登山"
结果是被处理过的"登山协会"被替换为<a>登山协会</a>
但"登山协会"中含有"登山",
当处理"登山" 的时候标签里面的(<a>登山协会</a>)也被处理了
所以超级连接也被处理了,谁帮写个正则只让替换<a>标签外的关键字
高手指教,谢谢了
$sort['登山'] = 'http://bbs.8888.com';
$sort['8888'] = 'http://www.8888.com';
$str = "登山的人和登山协会这是要做替换的一段文字.";
echo '元字符串:'.$str.'<br>' ;
foreach($sort as $k=>$v){
$href = '';
$href = "<a href='".$v."' target=_blank><font color=red><b>".$k."</b></font></a>";
$str = preg_replace("/".$k."(?![^<>]*(<\/a> ¦>))/i",$href,$str);
}
代码如上
就是先处理"登山协会"然后处理"登山"
结果是被处理过的"登山协会"被替换为<a>登山协会</a>
但"登山协会"中含有"登山",
当处理"登山" 的时候标签里面的(<a>登山协会</a>)也被处理了
所以超级连接也被处理了,谁帮写个正则只让替换<a>标签外的关键字
高手指教,谢谢了
$sort['登山协会'] = 'http://www.8888.com';
$sort['8888'] = 'http://www.8888.com';
自己去查一下(?!:)以及(?=:)的用法,通过自己改就明白了
注意数组的顺序比较重要
$sort['登山协会'] = 'http://www.8888.com';
$sort['登山'] = 'http://bbs.8888.com';
$sort['8888'] = 'http://www.8888.com';
$str = "登山的人和登山协会这是要做替换的一段文字.";
echo '元字符串:'.$str.'<br>' ;
foreach($sort as $k=>$v){
$href = '';
$href = "<a href='".$v."' target=_blank><font color=red><b>".$k."</b></font></a>";
$str = preg_replace("/".$k."(?![^<>]*(<\/a> ¦>))/i",$href,$str);
}
代码如上
就是先处理"登山协会"然后处理"登山"
结果是被处理过的"登山协会"被替换为<a>登山协会</a>
但"登山协会"中含有"登山",
当处理"登山" 的时候标签里面的(<a>登山协会</a>)也被处理了,着问题很难解决的
这里有个相同的问题。
PHP的正则我不会用。。
不过应该有类似的方法实现我那个replace的效果。。
<script type="text/javascript">
var strng = "上海市,上海等,<a 属性='上海等'>上海等<\/a>";
var key = ["上海市", "上海"]
var reg = new RegExp("(<a[^>]*>(?:.|\\n|\\r)+?<\\/a>)|(" + key.join("|") + ")", "ig");
var j = strng.replace(reg, function (a, b, c) {
return b ? a : "<a newURL>" + a + "<\/a>";
});
alert(j);
</script>
var strng = "登山的人和登山协会这是要做替换的一段文字.";
var key = ["登山协会", "登山", "8888"];
var sort = []
sort['登山协会'] = 'http://www.8888.com';
sort['登山'] = 'http://bbs.8888.com';
sort['8888'] = 'http://www.8888.com'; var reg = new RegExp("(<a[^>]*>(?:.|\\n|\\r)+?<\\/a>)|(" + key.join("|") + ")", "ig");
var j = strng.replace(reg, function (a, b, c) {
return b ? a : "<a href='" + sort[a] + "'><font color='red'>" + a + "<\/font><\/a>";
});j = j.replace(reg, function (a, b, c) {
return b ? a : "<a href='" + sort[a] + "'><font color='red'>" + a + "<\/font><\/a>";
});j = j.replace(reg, function (a, b, c) {
return b ? a : "<a href='" + sort[a] + "'><font color='red'>" + a + "<\/font><\/a>";
});
//你看我连续替换了3变也没出现问题啊只要<a>不出现嵌套还有不是很复杂(<[^>]用这个校验的不是很严谨不够应该足够了>
alert(j);
</script>
其实我要的表达式只要忽略<a 属性>内容</a>标签<a>中的所有字符串就行,但是就是很难做到,辛苦你了,再帮看看吧,呵呵
=================
<?php
$sort['登山协会'] = 'http://www.8888.com';
$sort['登山'] = 'http://bbs.8888.com';
$sort['8888'] = 'http://www.8888.com';
$str = "登山的人和登山协会这是要做替换的一段文字."; $href = '';
$keyStr = implode('|',array_keys($sort));
$str = preg_replace_callback("/(<a[^>]*>(?:.|\\n|\\r)+?<\\/a>)|(".$keyStr.")/i","Foo",$str);function Foo($matchs)
{
global $sort;
$v = $sort[$matchs[2]];
return "<a href='".$v."' target=_blank><font color=red><b>".$matchs[2]."</b></font></a>";
}
echo htmlspecialchars($str);
?>
很感激的眼神看着你,清澈兄。这PHP看着迷糊啊
:D
不迷糊,比起javascript容易上手多啦....
谢谢了
大家辛苦了
特别鸣谢 foolbirdflyfirst(湖水清澈@Fix my lover@)
对muxrwc(厕所宣言:信念永不变,追猫永不弃。) 也表示由衷的感谢
还有lxcnn(过客)的鼎立帮助
问题解决了
谢谢大家,祝大家工作顺利,生活开心
哈哈
有空没空的都帮帮我 哈哈