符号 | 意义 | 说明 |
. | 任意一个字符 | 最简单的元字符,匹配任意字符,但不包括换行符“\n”。
|
\ | 转义 | 把元字符改变为普通字符,或者把某些普通字符转变为元字符。
比如,“\.”就是代表普通的点号,不代表其他字符。 |
\s | 空白字符 | 半角空格、制表符等空白字符。在Sigil中还能匹配到换行符“\n”和空白行,使用要注意。
注意,不能匹配到全角空格。 |
\t | 制表符 | 匹配制表符。 |
\n | 换行符 | 表示文章的换行,这是一个不可见符号,在例子中,这个符号在“_”的位置。
aaa\n
bbb
你能够通过“\n”找到换行符,但不能够插入换行符。要在替换结果中换行,需要用“\r”。 |
\r | 回车 | 代表一个回车符。这个符号不会在文本中出现,因此不能查找到。
但是如果你需要在查找结果中插入一个换行,那么就要用“\r”。
注意,插入后在文本中出现的仍然会是“\n”而不是“\r”。 |
\d | 任意一个阿拉伯数字 | 也就是可以代表0~9中的任意一个。 |
\D | 任意一个非阿拉伯数字
| 0~9以外的字符,同样的,不包括换行符“\n” |
^ | 行首 | 即一行的开头。Sigil中不能单独使用,要配合其他字符。
比如,“^a”表示在行首的“a”,能匹配到第一行和第三行的字母“a”。第二行因为行首是空格,因此匹配不到。
abc
abc
abcd |
$ | 行尾 | 表示任意一行的结尾,不包括换行符。在Sigil中不能单独使用。
比如,“c$”表示位于行尾的“c”,能够匹配到第一行和第二行的字母“c”。
abc
abc
abcd
|
+ | 一或更多 | 表示一个或更多。必须配用其他字符使用。添加在一个字符后面,表示一个或更多个该字符。
相当于“{1,}”
比如,“a+”表示一个以上的“a”,以下例子都能匹配到。
a
aa
aaa |
| 尽可能少 | 表示尽可能少。必须配合其他字符使用。
比如,“accccbb”中“a.*b”匹配到“accccbb”,而“a.*?b”就能只匹配到“accccb”。
※注意:在某些平台的正则表达式中,这一功能很可能由“-”减号提供。 |
| | 或 | 一个逻辑选择符。
“aa|bb”既可以匹配到“aa”也可以匹配到“bb”。
可以用到多个选项中,比如“aa|bb|cc”。
“1|2|3”相当于“[123]”。 |
* | 尽可能多 | 即无或更多。相当于“{0,}” |
{n,m} | 个数范围 | 表示匹配项的个数范围。
比如,“a{3}”表示“aaa”,“a{2,4}”表示“aa”或“aaa”或“aaaa”,“a{1,}”表示一个以上的“a”。
注意,“a{,2}”应该表示两个以下的“a”,但是这种写法在Sigil中无效,要写成“a{0,2}”。 |
[] | 包含 | “[]”本身匹配一个字符。
比如,“[abc]”匹配“a”、“b”或“c”。通常不分顺序,“[abc]”和“[bca]”一样。
“[]”中用“-”表示范围,“[a-z]”表能匹配到“a”到“z”全部26个字母之一。
比如,“[0-9]”和“\d”是一样的,但是“\d”速度更快。
如果要在“[]”中匹配“-”本身,把“-”写在最前面,或者把它转义“\-”。
比如“[-0-9]”,就能匹配所有阿拉伯数字和“-”。
|
[^] | 不包含 | “[]”的逆操作。
比如“a[^b]c”,能匹配到第二行,第三行。
abc
adc
afc
注意,因为“[]”中符号是无序的,因此如果要排除字符串,要用其他方法。 |
() | 捕获组 | “(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”。
同样地,也能在查找时应用。
比如有字符串“abc111abc”,那么表达式“(abc).*\1”就能匹配到所有内容。
注:在其他平台中,可能使用的是$0,$1等表示方法。 |
(?s) | 多行匹配 | 放在表达式的最前端,使得“.”可以匹配到“\n”,从而实现跨行匹配。
比如以下例子:
<div></div>
<h1></h1>
<div></div>
使用正则表达式“<div>.*</div>”一次只能匹配到第一行或者第三行。
而使用“(?s)<div>.*</div>”则能一次性匹配到第一行到第三行所有内容。
注:这是Sigil特有元字符,其他平台有另外的方法实现该功能。
注2:此前缀和勾选“DotAll”效果一致。 |
(?U) | 最少匹配 | 放在表达式的最前端,使得整个正则表达式实现最少匹配。
比如以下例子:
<div>AAA<div>BBB</div>CCC</div>
正则表达式“<div>.*</div>”会匹配到整个句子。
而“(?U)<div>.*</div>”只会匹配到“<div>AAA<div>BBB</div>”。
注:这是Sigil特有元字符,其他平台有另外的方法实现该功能。
注2:此前缀和勾选“Minimal Match”效果一致。
|