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。

