测试通过Sigil 1.8版本。

表达式 意义 说明
. 任意一个字符 最简单的元字符,匹配除了换行符(\n)以外的任意一个字符
\ 转义 把元字符改变为普通字符。比如,“\.”就是代表普通的点号,不代表其他字符
\s 空白字符 表示半角空格、制表符、换行符等空白字符的其中一个。
\S 非空白字符 匹配除了半角空格、制表符、换行符等空白字符以外的一个字符
\t 制表符 匹配制表符
\n 换行符 表示文章的换行,这是一个不可见符号,在例子中,这个符号在“_”的位置。
例如:
aaa\n
bbb
你能够通过“\n”找到换行符,但不能够插入换行符。要在替换结果中换行,需要用“\r”。
(Sigil1.8中测试可以通过使用\n插入换行符)
\r 回车符 代表一个回车符。这个符号不会在文本中出现,因此不能查找到。但是如果你需要在查找结果中插入一个换行,那么就要用“\r”。
注意,插入后在文本中出现的仍然会是“\n”而不是“\r”。(sigil里使用"\n"一样可以插入换行符。)
\b 匹配字词边界 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符
\d 任意一个阿拉伯数字 也就是可以代表0~9中的任意一个。
\w 任意一个字母或数字或下划线 也就是 A~Z,a~z,0~9,_ 中任意一个
\D 任意一个非阿拉伯数字 0~9以外的一个字符,同样的,不包括换行符“\n”
^ 与字符串开始的地方匹配,不匹配任何字符 即一行的开头。Sigil中不能单独使用,要配合其他字符。
比如:
abc
 abc
abcd
“^a”表示在行首的“a”,能匹配到第一行和第三行的字母“a”。第二行因为行首是空格,因此匹配不到。
$ 与字符串结束的地方匹配,不匹配任何字符
表示任意一行的结尾,不包括换行符。在Sigil中不能单独使用。
比如:
abc
 abc
abcd
“c$”表示位于行尾的“c”,能够匹配到第一行和第二行的字母“c”。
| 左右两边表达式之间“或”关系,匹配左边或者右边 一个逻辑选择符。“aa|bb”既可以匹配到“aa”也可以匹配到“bb”。
其他,“gr([a-z]|[A-Z])y”可以匹配到“grdy”或 “grTy”。还可以用到多个选项中,比如“aa|bb|cc”。“1|2|3”相当于“[123]”。
+ 匹配至少出现1次,相当于 {1,} 必须配用其他字符使用。添加在一个字符后面,表示匹配1个或更多个该字符。
相当于“{1,}”。
比如,“sa+”表示一个以上的“a”,以下例子都能匹配到。
sa
saa
saaa
? 匹配表达式0次或者1次,相当于 {0,1} 必须配用其他字符使用。添加在一个字符后面,表示匹配该字符0或1次。
比如:
srtjkls
“sr?”可以匹配到“srtjkls”中的“sr”以及行尾的“s”,相当于“sr|s”。
(在Sublime Text测试可用)
* 表达式出现 0 或多次,即无或更多。 必须配用其他字符使用。添加在一个字符后面,表示匹配0个或多个该字符。相当于“{0,}”。
比如,“sa*”表示0个以上的“a”,以下例子都能匹配到。
s
sa
saa
saaa
{n} 表达式重复n次 必须配用其他字符使用。添加在一个字符后面,表示匹配该字符的个数范围。
{m,n} 表达式至少重复m次,最多重复n次 比如,“a{3}”表示“aaa”,“a{2,4}”表示“aa”或“aaa”或“aaaa”,“a{1,}”表示一个以上的“a”。
{m,} 表达式至少重复m次 注意,“a{,2}”应该表示两个以下的“a”,但是这种写法在Sigil中无效,要写成“a{0,2}”。
*? 匹配前一项内容 0 或多次 (最少匹配) 必须配用其他字符使用。添加在一个字符后面,表示匹配0个或多个该字符(最少匹配)。
比如:
ssrTgfkjkdhurst
“s.*?r”可以匹配到“ssr”,而“s.*r”可以匹配到“ssrTgfkjkdhur”
“*?”与“+?”的区别,暂时没想到例子,一般都使用“+?”
(在Sublime Text测试可用)
+? 匹配前一项内容 1 或多次 (最少匹配) 必须配用其他字符使用。添加在一个字符后面,表示匹配1个或更多个该字符(最少匹配)。
比如:
ssrTgfkjkdhurst
“s.+?r”可以匹配到“ssr”,而“s.+r”可以匹配到“ssrTgfkjkdhur”
(在Sublime Text测试可用)
*? 皆为懒惰限定符,匹配尽可能少的字符 例: ([0-5].+[6-9]): 2iamyour7father8 ✔
   ([0-5].+?[6-9]): 2iamyour7 ✔ ~以最短的形式去获取中间的字串。
+?
??
{n,m}?
[ ] 匹配其中的一个字符 注意:“[]”只匹配一个字符。“[]”是不分顺序的,“[abc]”和“[bca]”一样。
比如,“[abc]”匹配“a”、“b”或“c”中的一个。
“[]”中用“-”表示范围,“[a-z]”表示能匹配到“a”到“z”全部26个字母之一。比如,“[0-9]”和“\d”是一样的,但是“\d”速度更快。
如果大小写敏感,使用“[a-zA-Z]”能匹配到“a”到“z”和“A”到“Z”全部26个字母之一。
如果要在“[]”中匹配“-”本身,把“-”写在最前面,或者把它转义“\-”。
比如,“[-0-9]”就能匹配所有阿拉伯数字和“-”。
[^] 匹配除了[^]内字符以外的一个其他字符 注意:“[^]”只匹配一个字符。注意,因为“[^]”中符号是无序的,因此如果要排除字符串,要用其他方法。
比如:
abc
adc
affc
“a[^b]c”能匹配到第二行,不能匹配第一行、第三行。“[^abc]” 表示匹配任意不包括 a, b, c的一个字符。
() 捕获组 “(abc)”表示把“abc”分为一组。分组后可以配合其他元字符使用。一个组称为一个捕获组。
比如,“(abc)+”就是一个或以上“abc”组合的意思。
捕获组中的内容会被记录并编号,可以通过“\0”、“\1”这种形式来引用。
(?: ) 分组/非捕获组 作用上与“()”类似,能把内容分为一组,但“(?: )”仅有分组功能,不记录匹配内容。也就是说,无法通过“\0”“\1”等方式引用。
此元字符虽然消耗的资源更少,速度更快,在简单应用中可能体验不到与“()”的区别。
\0,\1,\2… 反向引用 配合“()”使用,引用一个分组。
比如,在查找时有分组“(abc)”,那么“\1”就代表“abc”。有分组“a(bc)(de)f”,那么“\0”代表“abcdef”,“\1”代表“bc”,“\2”代表“de”。如此类推。
嵌套也是一样的,比如“(abc(def))”,“\1”代表“abcdef”,“\2”代表“def”。
同样地,\0,\1,\2…也能在查找时应用。
比如有字符串“abc111abc”,那么表达式“(abc).*\1”就能匹配到所有内容。
注:在其他平台中,可能使用的是$0,$1等表示反向引用。
(?s) 多行匹配 让通配符“.”可以匹配到“\n”,从而实现跨行匹配。
比如以下例子:
<div></div>
<h1></h1>
<div>sdree</div>
使用正则表达式“<div>.*</div>”一次只能匹配到第一行或者第三行。
而使用“(?s)<div>.*</div>”则能一次性匹配到第一行到第三行所有内容。
注:这是Sigil特有元字符,其他平台有另外的方法实现该功能。
放在表达式最前面可以使整个表达式跨行匹配,也可以放在表达式中间使用,(?s:子表达式),如(?s:.*)
注2:此前缀和勾选“DotAll”效果一致。
(?U) 最少匹配 放在表达式的最前端,使得整个正则表达式实现最少匹配。
比如以下例子:
<div>AAA<div>BBB</div>CCC</div>
正则表达式“<div>.*</div>”会匹配到整个句子。
而“(?U)<div>.*</div>”只会匹配到“<div>AAA<div>BBB</div>”。
注:这是Sigil特有元字符,其他平台有另外的方法实现该功能。
注2:此前缀和勾选“Minimal Match”效果一致。

常用正则表达式

.* 匹配所有内容(注意:“.”不能匹配到“\n”(换行符)) “.”代表一个字符,“*”代表前一个字符0或多个,因此“.*”代表“所有字符”。
比如:<div>.*</div>
表示<div></div>标签内的所有内容,可以依次匹配到下列各项
<div>AAACCCC</div>
<div></div>
<div>!!!!AAAAACCCC啊啊啊啊</div>
但不能跨行,这样是匹配不到的下面的例子的:
<div>
AAAAAA
</div>
如果要匹配到跨行,需要使用“(?s)”。写成(?s)<div>.*</div>
^[ \t ]*$\n 匹配空白行 匹配空白行的典型写法。可以匹配无内容的行,只有空格的行,只有制表符的行或者空格和制表符混合排列的行。
[]中包括的分别是半角空格“ ”,制表符“\t”和全角空格“ ”。也可以根据需要添加更多的字符。
[ \t ]+$ 行尾空白字符 匹配出现在行尾的空白字符,比如空格。思路和【匹配空白行】一致,使用“$”把搜查范围限定在结尾,使用了符号“+”确保最少有一个空白字符,否则会查找失败。
查找“。+” 压缩重复符号 很容易理解,把一个以上的“。”,换成一个“。”,从而达到压缩重复符号的目的。可以灵活改变,压缩各种重复的字符。配合查找【空白行】,也能实现压缩空白行。
替换“。”
[A-Za-z] 匹配任意一个英文字母 也可以写成[a-zA-Z],a-z和A-Z顺序无关;[a-zA-Z0-9]则表示:匹配英文和数字当中的任意一个字符
[a-z]表示:匹配从 a 到 z 之间的任意一个字符
[^A-Za-z] 匹配任意一个非英文字母的字符 [^A-Za-z0-9]则表示:匹配任意一个非英文字母和数字的字符
[\u4E00-\u9FA5] 匹配任意一个汉字 注意:[\u4E00-\u9FA5]这种匹配汉字写法不算全面,不包含一些生僻汉字。
例外:在SublimeText的正则表达式使用中,[\u4E00-\u9FA5]可以匹配到英文字母、数字以及部分英文标点符号,需要写成[\x{4e00}-\x{9fa5}],才能只匹配到汉字。Sigil需要写成[\x{4e00}-\x{9fa5}]
详情参照用正则表达式匹配汉字,完整总结
[\x{ff41}-\x{ff5a}\x{ff21}-\x{ff3a}] 匹配任意一个全角英文字母 如果要匹配全角英文字母和全角数字,写成[\x{ff41}-\x{ff5a}\x{ff21}-\x{ff3a}0-9]
详情unicode编码参照全角英语字母,全角阿拉伯数字,汉语数字对应的unicode编码
(在Sublime Text测试可用)

零宽断言

(?= ) 正向肯定预查,【不(捕获)内容】 例: d(?=ing): wing ✘、win ✘、(d)ing ✔
例: [^\s]+(?=er): (sab)er ✔、(teach)er ✔、er ✘
(?<= ) 反向肯定预查,【不(捕获)内容】 例: (?<=sa)ber: lancer ✘、teacher ✘、sa(ber) ✔
例: (?<=第).章: 第(一章) ✔、二章 ✘、弟三章 ✘
(?! ) 正向否定预查,【不(捕获)内容】 例: d(?!=ing): (d)og ✔、ding ✘、(d)oor ✔
例: sa(?!=ber): saber ✘、(sa)ve ✔、(sa) ✔
(?<! ) 反向否定预查,【不(捕获)内容】 例: (?<!sab)er: berserk(er) ✔、teach(er) ✔、saber ✘
例: (?<!一)章: 五章 ✔、一章 ✘、三章 ✔
xxx(?=ing) 匹配以ing结尾的xxx(不捕获ing)
xxx(?!ing) 匹配不是以ing结尾的xxx
(?<=ing)xxx 匹配以ing开头的xxx(不捕获ing)
(?<!ing)xxx 匹配不是以ing开头的xxx
(?<=\s)\d+(?=\s) 匹配两边是空白符的数字(不捕获空白符)

引用:

http://www.regexlab.com/zh/regref.htm

http://www.360doc.com/content/14/1205/19/9152906_430669102.shtml

https://tieba.baidu.com/p/3493107610