文档章节

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

kaishui
 kaishui
发布于 2017/09/08 18:17
字数 920
阅读 59
收藏 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
粉丝 52
博文 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优化流程对于很多刚踏入SEO领域的朋友来说并不容易掌握,若是你对于网站SEO优化没有一个正确的观念亦或者说是思维、对搜索引擎算法规则不能熟练的掌握,在优化工作的实际操作中极易出...

1533031208314616
08/31
0
0
SEO学习解剖外链高级操作策略

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

lizhiww
03/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好用的vue组件

http://elickzhao.github.io/2017/08/vue%E4%B8%80%E4%BA%9B%E7%89%B9%E5%88%AB%E6%9C%89%E7%94%A8%E7%9A%84%E6%8F%92%E4%BB%B6/...

Littlebox
29分钟前
2
0
linux 源码安装mysql8

1.安装依赖 yum -y install wget cmake gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel   2.下载源码包 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-......

苏牧影子
29分钟前
1
0
BeanFactory和FactoryBean

BeanFactory BeanFactory是ioc容器的顶层接口,里面定义了一些容器基本的功能 类似ConfigurableBeanFatory和ApplicationContext就是比较高级的容器,除了基本的方法之外,还实现了很多高级的...

sendo
30分钟前
1
0
Java并发(9)- 从同步容器到并发容器

引言 容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线...

Ala6
35分钟前
3
0
Java定时器Timer学习之一

种类: 接通延时型定时器:接通延时型定时器是各种PLC(可编程控制器)中最常见最基本的定时器,这种定时器在Siemens的PLC中,成为SD型定时器 断开延时型定时器:这种定时器是当输入条件00000为ON时...

王怀楼
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部