文档章节

富文本替换关键字做SEO内链

kaishui
 kaishui
发布于 2017/09/08 18:17
字数 920
阅读 58
收藏 4

在很多博客系统中,做SEO 都需要涉及到内链,下面主要介绍使用java替换部分关键字(怎样中文分词,有空再写写)的代码。

SEO 内链,把富文本原文:

//原文 假设 建筑为关键字
        String source = "<p alt='建筑设计'>建筑很美,建筑很烂" +
                "<br/>"+
                "建筑很美,<a href=\"http://www.baidu.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "建筑人,建筑社区" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "</p>" +
                "<p>" +
                "<a href='http://www.baidu.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "建筑很美,建筑很烂</p><a>baidu建筑真的不错</a>";

转换成我们希望的目标:

  //目标
        String target = "<p alt='建筑设计'><a>建筑</a>很美,<a>建筑</a>很烂" +
                "<br/>" +
                "<a>建筑</a>很美,<a href=\"http://www.mahoooo.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "<a>建筑</a>人,<a>建筑</a>社区" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "</p><p>" +
                "<a href='http://www.mahoooo.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "<a>建筑</a>很美,<a>建筑</a>很烂</p><a>mahoooo建筑真的不错</a>";

通过原文和想要得到的目标比对,可以总结出:

1. 不想替换掉html 标签里面的文字,例如: src='http://www.baidu.com/建筑', alt='建筑设计'
2. 不希望替换掉<a href='http://www.baidu.com/建筑' title='的建筑'>优秀的建筑</a> text中的内容,既:优秀的建筑

通过上述分析(经过多种正则表达式测试,各种弯路,尝试过使用jsoup等工具类,中文分词保持<a>标签等方法):

public static void main(String[] args) {
//        String regex = "(?=(<a.*?>(.*?)</a>))";
        //原文
        String source = "<p alt='建筑设计'>建筑很美,建筑很烂" +
                "<br/>"+
                "建筑很美,<a href=\"http://www.baidu.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "建筑人,建筑社区" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "</p>" +
                "<p>" +
                "<a href='http://www.baidu.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.baidu.com/建筑' alt='优秀的建筑'></img>" +
                "建筑很美,建筑很烂</p><a>baidu建筑真的不错</a>";

        //目标
        String target = "<p alt='建筑设计'><a>建筑</a>很美,<a>建筑</a>很烂" +
                "<br/>" +
                "<a>建筑</a>很美,<a href=\"http://www.mahoooo.com/建筑\" title='优秀的建筑'>优秀的建筑</a>" +
                "<a>建筑</a>人,<a>建筑</a>社区" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "</p><p>" +
                "<a href='http://www.mahoooo.com/建筑' title='优秀的建筑'>优秀的建筑</a>" +
                "<img src='http://www.mahoooo.com/建筑' alt='优秀的建筑'></img>" +
                "<a>建筑</a>很美,<a>建筑</a>很烂</p><a>mahoooo建筑真的不错</a>";


//        String regex = "<[^a].*?>.*?<";

        //主要考虑html标签里面的属性 value值不能替换,和<a>标签text()不能替换,
        // 例如:匹配 src="***" 和 <a href=''>建筑<
        //之后就排除匹配段,其他都可以替换关键字
        String regex = "([\\w]+(='.*?'))|([\\w]+(=\".*?\"))|(<a.*?>.*?<)";
        Pattern p = Pattern.compile(regex);

        // 获取 matcher 对象
        Matcher m = p.matcher(source);
        //保存结果
        StringBuffer result = new StringBuffer();
        //上一个结束位置
        int lastEnd = 0;
        //是否匹配
        while (m.find()) {
            System.out.println("text:" + m.group());
            System.out.println("start: " + m.start() + "end:" + m.end());
            //提取没有匹配段,替换关键字并拼接
            result.append(source.substring(lastEnd,m.start()).replaceAll("建筑", "<a>建筑</a>"));
            //拼接匹配段
            result.append(source.substring(m.start(), m.end()));
            //作为下一个未匹配段的开始下标
            lastEnd = m.end();
        }
        //最后未匹配段
        result.append(source.substring(lastEnd).replaceAll("建筑", "<a>建筑</a>"));
        System.out.println("result:" + result.toString());

    }

© 著作权归作者所有

共有 人打赏支持
kaishui
粉丝 53
博文 12
码字总数 10711
作品 0
广州
程序员
55个用于搜索引擎优化的小技巧

每个人都喜欢好用的技巧,对吗?这里有55个用于搜索引擎优化的小技巧,甚至你的老妈用起来都易如反掌。哦,不是我的老妈,但你明白我的意思。这意味着网页设计师和SEO新手中大部分人都能迅速...

晨曦之光
2012/03/09
0
0
搜索引擎优化(SEO)的四大误区?

一个SEOer会在学习操作整个过程中会闯入一个又一个误区。为了SEO更清晰的被大家理解,也为了缩短大家的搜索引擎优化项目的实施时间,我总结了以下四种常见的误区,与大家分享下! 误区一:排名...

范文远
2011/02/23
276
4
如何做到网站排名百战百胜

常听人说,知己知彼才能百战百胜,这告诉了我们,打败敌人先要了解敌人,我们做排名也是一样,想要排名靠前,就必须要了解对手。 对于“SEO”这个产物,做为进入互联网更晚的企业站们来说对其...

vipzhongxiaofei
2012/09/12
0
0
SEO学习解剖外链高级操作策略

“大站靠内链,小站靠外链”小编和大家一致认为无论是大站还是小站,内链和外链都必须要做的,外链也是SEO搜索引擎中必不可少的一部分,所以今天dapeiw小编总结了外链的一些作用、表现形式以...

lizhiww
03/21
0
0
14年推广优化老司机教你零基础做好SEO

最近,星哥听到一位热爱学习的朋友的亲切问候:“SEO每天上班的具体工作究竟是做什么?” 既然您~这么诚心诚意的发问了,那星哥就大发慈悲的告诉你。 我们请教了一下一位从事14年SEO行业的老...

Littlesist
05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java工程师用spring boot和web3j构建以太坊区块链应用

区块链最近IT世界的流行语之一。这项有关数字加密货币的技术,并与比特币一起构成了这个热门的流行趋势。它是去中心化的,不可变的分块数据结构,这是可以安全连接和使用的密码算法。在这种结...

笔阁
9分钟前
1
0
聊聊sentinel的SentinelWebAutoConfiguration

序 本文主要研究一下sentinel的SentinelWebAutoConfiguration SentinelWebAutoConfiguration spring-cloud-alibaba-sentinel-autoconfigure-0.2.0.BUILD-SNAPSHOT-sources.jar!/org/springf......

go4it
11分钟前
0
0
java ArrayList 根据对象内的属性排序

//根据修改时间排序Comparator com = new Comparator<ReleaseInfo>() {public int compare(ReleaseInfo reInfo1, ReleaseInfo reInfo2) { //return reInfo2.getModifyTime().c......

成长中的小白
11分钟前
0
0
PowerDesigner p f m

(非原创) P:PirmaryKey 主键 F:ForeignKey 外键 M:Mandatory 强制要求(不能为空) 主键: 主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从...

森火
12分钟前
0
0
Nexus Repository Manager 搭建私有docker仓库

Nexus Repository Manager 搭建私有docker仓库 2018年05月08日 14:44:23 阅读数:115 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name n...

linjin200
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部