w3cschool 编程狮,随时随地学编程
下载APP
|
登录
个人中心
首页
入门教程
编程课程
特色实战
畅学全站
首页
/
SEO基础知识教程
/
SEO中的正则表达式
SEO中的正则表达式
什么是正则表达式?
正则表达式通常用来描述或者匹配一系列符合某个句法规则的字符串。比如^Colou?r$ 是一个用来匹配color和colour这两个字符串的正则表达式。一枚正则表达式由字符和元字符组成。
什么是元字符?
元字符是正则表达式中具有特殊意义的字符。它们是正则表达式的基石。比如[], ^, (), {}, $, +, *等。
正则表达式的元字符:
[]
^
()
$
+
?
.
*
|
\
!
1. [] – 这个中括号用来匹配其内部的任何一个单字符,例如:
[a] => 匹配一个单字符,它是小写字母a.
[ab] => 匹配一个单字符,它是小写字母a或者b.
[aB] => 匹配一个单字符,它是小写字母a或者大写字母B.
[1B] => 匹配一个单字符,它是数字1或者大写字母B.
[Dog] => 匹配一个单字符:它是大写字母D,小写字母o或者小写字母g。
[123b] => 匹配一个单字符:它是数字1, 2, 3或小写字母g.
[1-3] => 匹配一个单字符,它是数字1, 2或者3。
[0-9] => 匹配一个单字符,它是一个数字。
[a-d] => 匹配一个单字符,它是小写字母a, b, c或者d。
[a-z] => 匹配一个单字符,它是一个小写字母。
[A-Z] => 匹配一个单字符,它是一个大写字母。
[home.php] => 匹配一个单字符,它是小写字母h,小写字母o,小写字母m,小写字母e,特殊字符.,小写字母p,小写字母h或者小写字母p。
2. ^ – 又叫“脱字符”,用来表示一段正则表达式的开始,例如:
^Colou?r => 匹配一个样本,该样本以Color或者Colour起头。
^Nov(ember)? => 匹配一个样本,该样本以Nov或者November起头。
^elearning*\.html => 匹配一个样本,该样本以elearning.html起头。
^\.php => 匹配一个样本,该样本以任意php文件起头。
^product-price\.php => 匹配一个样本,该样本以product-price.php起头。
脱字符跟随向右开口的中括号表示否定,例如:
[^a] => 匹配一个单字符,只要它不是小写字母a。
[^B] => 匹配一个单字符,只要它不是大写字母B。
[^1] => 匹配一个单字符,只要它是它不是数字1。
[^ab] => 匹配一个单字符,只要它不是小写字母a或b。
[^aB] => 匹配一个单字符,只要它不是小写字母a或大写字母B。
[^1B] => 匹配一个单字符,只要它不是数字1或者大写字母B。
[^Dog] => 匹配一个单字符,只要它不是大写字母D,小写字母o或者小写字母g。
[^123b] => 匹配一个单字符,只要它是它不是数字1,2,3或者小写字母b。
[^1-3] => 匹配一个单字符,只要它不是数字1,2或3。
[^0-9] => 匹配一个单字符,只要它不是数字。
[^a-z] => 匹配一个单字符,只要它不是小写字母。
[^A-Z] => 匹配一个单字符,只要它不是大写字母。
3. () – 圆括号用来匹配字符串,例如:
(a) => 匹配字符串a。
(ab) => 匹配字符串ab。
(dog) => 匹配字符串dog。
(dog123) => 匹配字符串dog123。
(0-9) => 匹配字符串0-9。
(A-Z) => 匹配字符串A-Z。
(a-z) => 匹配字符串a-z。
(123dog588) => 匹配字符串123dog588。
注意:()还被用来创造和储存变量。如:^(.*)$
4. $ – 用来标记一则表达式或者是一行的完结,例如:
Colou?r$ => 匹配一个样本,该样本以Color或者Colour结尾。
Nov(ember)?$ => 匹配一个样本,该样本以Nov或者November结尾。
elearning*\.html$ => 匹配一个样本,该样本以elearning.html结尾。
*\.php$ => 匹配一个样本,该样本以任意php文件结尾。
product-price\.php$ => 匹配一个样本,该样本以product-price.php结尾。
5. + – 一次或多次匹配前面的子字符,例如:
[a]+ => 一次或多次匹配小写字母a。
[dog]+ => 一次或者多次匹配小写字母d,o,或者g。
[548]+ => 一次或者多次匹配数字5,4或者8。
[0-9]+ => 一次或多次匹配数字。
[a-z]+ => 一次或多次匹配小写字母。
[^a-z]+ => 一次或者多次匹配非小写字母。
[a-zA-z]+ => 匹配任意的大小写字母组合。
[^9]+ => 一次或者多次匹配非9的字符。
6. ? – 零次或一次匹配前面的字符,例如:
[a]?+ => 零次或一次匹配小写字母a。
[dog]? => 零次或者一次匹配小写字母d,o,或者g。
[^dog]? => 零次或者一次匹配非小写字母d,o或者g。
[0-9]? => 零次或多次匹配数字。
[^a-z]? => 零次或多次匹配小写字母。
注意:在正则表达式中使用?表示之前的字母或者字母组可有可无。例如:正则表达式^colou?r$同时匹配color和colour。相似地,正则表达式^Nov(ember)28th?$匹配:nov 28,november 28,Nov 28th和November 28th。
7. . – 匹配非行尾的单字符,例如:
正则表达式Action.,Scene2匹配Action1,Scene2; Action A,Scene2; Action9,Scene2但却不匹配Action10,Scene2或者Action AB,Scene2。
8. * – 以任意次数(包括0次)匹配前面的字符,例如:
正则表达式31*将会匹配3,31,311,3111,31111等。
9. | – 表明逻辑或,例如:
正则表达式(His|Her)匹配字符串his或者her。
10. \ – 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用,或一个八进制转义符,例如:
正则表达式^www\.abc\.com$匹配www.abc.com
11.! – 表明逻辑非。但不像^(脱字符),它只在规则和条件的开头使用。例如:
(!abc) => 匹配非字符串abc。
[!0-9] => 匹配非数字的单字符。
[!a-z] => 匹配非小写字母的单字符。
一些正则表达式
^(*\.html)$ => 匹配.html前任意个数的字符并将其存入变量。
^dog$ => 匹配字符串dog。
^a+$ => 一次或多次匹配小写字母a。
^(abc)+$ => 一次或多次匹配字符串abc。
^[a-z]+$ => 一次或多次匹配小写字母。
^(abc)*$ => 以任意次数匹配字符串abc。
^a*$ => 以任意次数匹配小写字母a。
问:
找出所有以elearning开头并且包含.html扩展名的文件。
^elearning*\.html$
问:
找出所有的PHP文件。
^*\.php$
mod_rewrite
这是一个用C语言写的模块(功能):mod_rewrite.c。这个模块只能在Apache服务器1.2或之后的版本下工作同时被.htaccess文件执行(这是一个包含文件和文件夹配置指令和规则的ASCII文件)。通过这个模块你可以:
重写URL
重定向URL
解决正则URL问题
解决热链接问题
制作定制的403和404页面
基于IP地址提交内容,益处无穷
配置指令类型
总共有9种配置指令类型:
RewriteEngine
RewriteOptions
RewriteLog
RewriteLogLevel
RewriteLock
RewriteMap
RewriteBase
RewriteRule
RewriteCond
但在这里我们只讨论三种指令:RewriteEngine, RewriteRule和RewriteCond。我至今还没发现其他的指令有什么用。但如果你想,其他的指令也会对SEO有所帮助。
RewriteEngine
这个配置指令用来激活或关闭mod_rewrite模块。
语法:RewriteEngine on/off
默认值:RewriteEngine off
这就是为什么在.htaccess文件中我们要加入下面的代码来激活mod_rewrite模块:
Options +FollowSymLinks
RewriteEngine on
RewriteRule
这个配置指令告诉服务器将给定的语句编译成规则。
语法:Rewrite <pattern> <substitution> [FLAGS]
这里的pattern是一个正则表达式而substitution是一个URL.
FLAG可以是[R], [F], [NC], [QSA], [L], [OR]等。
[R] => 重定向。默认值为302。可以被赋予从300到400的任意数值,例如:
RewriteRule ^index\.html$/index.php [r=301]
[F] => 禁止。经常与连字符-一起使用。这个连字符告诉服务器不要进行任何替代。这个信号告诉服务器不要完成请求,同时返还一条403代码。例如:
RewriteRule ^product-price\.php$ -[F]
[NC] => 它告诉服务器在匹配样本时无视大小写。例如:
RewriteRule ^him*\.php$[nc]
[QSA] => 追加请求字符串(Query String Append)。它告诉服务器将字符串从旧的URL传递到新的。
[L] => 最后规则。这个标签告诉服务器不要再处理更多的规则了。
[OR] => 逻辑或。这个标签用于RewriteCond声明中的逻辑或。
RewriteCond
这个配置指令告诉服务器将一个给定的声明编译成立刻跟进的规则的一个条件。
语法:RewriteCond_syntax
这里第一个mod_rewrite将每一个URL和给定的样本进行匹配。如果没有URL符合样本,那么mod_rewrite就会执行下一条规则。如果有一条URL和样本匹配,那么mod_rewrite就会搜索相应的RewriteCond。如果没有相应的RewriteCond存在,那么匹配的URL就会被替代。
如果相应的RewriteCond存在,那么每一条RewriteCond都会以从上到下的顺序被执行。服务器会将每一条RewriteCond的测试字符串和它相应的条件样本进行匹配。如果测试字符串与相应的条件样本不匹配,那么mod_rewrite就会执行下一条规则,否则就处理下一条RewriteCond。当所有的RewriteCond都成功处理完毕时,匹配的URL会被替代。测试字符串可以是:
简单文本
RewriteRule后方引用
RewriteCond后方引用
服务器变量
RewriteRule后方引用
形式为$N,这里的N可以是从0到9的任意数字。它用来标记在RewriteRule样本中被创建的变量,例如:
Rewrite ^(.*)$/index.php/$1 [L]
RewriteCond后方引用
形式为%N,这里的N可以是从1到9的任意数字。它用来标记从最后的匹配RewriteCond创建而来的在cond样本中的变量,例如:
RewriteCond %{HTTP_HOST} ^(123\.42\.162\.7)$
RewriteCond %1 ^123\.42\.162\.7$
RewriteRule .........
服务器变量
语法: % {Variable_Name}
例如:
%{HTTP_HOST} => 这个变量给出服务器信息以及其IP地址。
%{HTTP_USER_AGENT} => 这个变量给出用户操作系统和浏览器信息。
%{QUERY_STRING} => 这个变量返回查询字符串。
%{HTTP_REFERRER} => 这个变量返回来源的URL。
%{REMOTE_ADDR} => 这个变量返回来源的IP地址。
实例一
将所有对media文件夹的页面请求重定向到亲的页面media.html
RewriteRule ^media/$/media.html [r=301,l]
实例二
将oldaddress.html页面重定向至newaddress.html页面
RewriteRule ^oldaddress\.html$/newaddress.html [r=301,l]
实例三
将一个网址重定向至另一个网站
Redirect 301 http://www.anotherwebsite.com
实例四
禁止来自IP地址为12.34.56.78的访问者查看product-prices.html页面
RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$
RewriteRule ^product-prices\.html$/sorry.html -[F]
实例五
将abc.com/index.html重定向到www.abc.com
RewriteCond %{REQUEST_URL} ^index\.html$
RewriteRule ^(.*)$ http://www.abc.com/$1 [r=301,l]
实例六
阻止来自IP地址为12.34.56.78的访客查看sales-demo文件夹
RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$
RewriteRule ^sales-demo/$ /sorry.html -[F]
实例七
阻止来自IP地址为12.34.56.78的访客访问你的网站www.abc.com
RewriteCond %{REMOTE_ADDR} ^12\.34\.56\.78$
RewriteRule ^.*$/ -[F]
.htaccess
这是一个包含了文件、文件夹和整个网站的配置指令以及规则的ASCII码文件。你能在一个服务器上拥有多个.htaccess文件。事实上每个文件夹和目录都能有一个.htaccess文件。当你将这个文件放置在某一文件夹中时,其中的规则仅对该文件夹及其子文件夹中的文件有效。当你将这个文件放置在根目录时,其中的规则适用于服务器上所有的文件夹和文件。一个有效的.htaccess文件必须包含以下两行代码:
Options +FollowSymLinks
RewriteEngine on
网站结构和URL优化
网站内容量如何规划
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
基础知识
搜索引擎优化及搜索引擎营销
SEO的用处
学习SEO前应该知道的事
网站上线前的本地SEO
实现本地测试网站的搭建
选择功能强悍且利于优化的脚本程序
选择功能强悍且利于优化的脚本程序2
选择功能强悍且利于优化的脚本3
选择功能强悍且利于优化的脚本4
轻松搭建本地测试网站
网站页面的脚本代码和标签优化
适合主流CMS系统的代码优化方法
适合主流CMS系统的代码优化方法2
适合主流CMS系统的代码优化方法3
主流CMS系统网页代码和标签优化实例
主流CMS系统网页代码和标签优化实例2
主流CMS系统网页代码和标签优化实例3
主流CMS系统网页代码和标签优化实例4
网站内部链接规划和设计
内部链接助力SEO:收录、排名、权重和用户体验
内部链接规划原则
内部链接规划原则2
内部链接规划原则3
内部链接优化必备工具:链接检查
内部链接优化必备工具:链接检查2
内部链接优化必备工具:链接检查3
内部链接优化必备工具:链接检查4
交互功能的设计和取舍
交互功能的取舍原则
必备的联系信息
问答还是留言
评论的取舍和维护
“顶一下”与“踩一下”
在线客服的取舍
纠错功能的部署
投票与问卷调查
SEO与用户体验并重的域名、主机选择
域名与SEO
主机空间与SEO
SEO网页优化
网页title的优化
关键词的选取
关键词(keywords)的优化
元标签及网页描述的优化
网站结构和URL优化
SEO中的正则表达式
网站内容规划和更新策略
网站内容量如何规划
建设高质量的网站内容
网站内容建设的3种方法之采集
欺骗搜索引擎的内容建设方法“伪原创”
网站内容建设需要原创精神
利于提升用户体验的10种标题编写方法
如何编写吸引用户的内容(内容形式与用户体验)
内容结构优化与用户体验
内容表达方式与用户体验
内容编写与用户行为引导
适合用于引导用户行为的5个网页位置
吸引搜索引擎“蜘蛛”收录内容的方法
友情链接建设
友情链接对seo的3个重要意义
如何判断友情链接的质量高低
添加友情链接网站的3个注意事项
站长是否应该购买链接?
寻找友情链接的4种方法
利用链接交换平台建设友情链接
让别人主动链接你的链接诱饵设计
什么是链接诱饵
有效的链接诱饵构成方法
复制功能与链接诱饵
什么是资源型链接诱饵
什么是话题型链接诱饵
什么是活动型链接诱饵
用执行力说话的网站推广
什么是SNS网站推广
利用SNS进行网站推广的具体方法
微博推广与微博营销的优缺点
微博推广的11种方法和注意事项
搜索引擎优化中的博客外部链接推广
论坛中的外部链接推广优化
如何选择博客平台并培养优质博客
博客文章中的外部链接规划
博客建设效果评估的方法
论坛的外部链接建设案例分析
博客和论坛外部链接建设的5个要素
问答推广与吸引流量的方法
百度百科推广
如何在百度百科中建设外部链接
提升百度百科编辑通过率的7种方法
百度百科外部链接建设效果简要分析
什么是分类目录推广
如何让网站加入hao123网址导航
什么是电子邮件推广
电子邮件推广的缺点及需要注意的13个推广要点
电子书推广及4个优势
SEO效果监控与改进
网站特征页面收录查询和记录
利用工具本地查询收录的方法
利用网络上的工具查询收录的方法
关键词排名监控的意义和不足
关键词排名监控的5个步骤
整站建设的衡量标准:流量监控
网站优化的单纯网站流量指标
流量中的用户行为指标
流量中的个性化用户信息指标
网站流量的3种来源
百度统计简介与安装方法
阅读百度统计报告分析流量情况
转化率分析:体现网站盈利能力的最佳标准
网站转化率的比较方法和意义
电子商务类网站转化率分析
提高电商网站转化率的2种方法
广告联盟转化率分析及指标
提升广告联盟转化率的2种方法
动态关键词体系维护与网站进步
把握关键词帮助网站发展的方法
发现更多关键词的3种方法
新关键词融入网站的方法
关闭
MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }