测试通过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