缙哥哥非常懒,当遇到重复的事情时,就喜欢通过批量处理来解决,而文本用的是 EmEditor 程序,EmEditor 正则表达式语言基于 Perl 正则表达式语法,所以通过掌握EmEditor正则表达式语法,大大提升工作效率。
EmEditor 32&64位 v17.8.0版下载,附注册码
文字
所有字符都是文字除了: “.”, “*”, “?”, “+”, “(“, “)”, “{“, “}”, “[“, “]”, “^”, “$” 和 “”。这些字符代表文字当之前有一个 “” 时。一个文字是一个与它自己相匹配的字符。例如,搜索 “?” 会匹配每一个在文档中的 “?” ,或搜索 “Hello” 会匹配每一个在文档中的 “Hello” 。
元字符
下列表格包含元字符(非文字)的完整列表以及这些元字符在正则表达式中的行为。
把下一个字符标记为一个特殊字符,一个文字,或一个向后引用。例如,’n’ 与字符 “n” 相匹配。而 ‘n’ 代表一个换行符号。序列 ‘\’ 代表 “”,”(” 则与 “(” 相匹配。 | |
^ | 匹配输入字符串的开始位置。例如,”^e” 表示任何由 “e” 开头的字符串。 |
$ | 匹配输入字符串的结尾位置。例如,”e$” 表示任何由 “e” 结尾的字符串。 |
* | 匹配之前的字符或子表达式零次或多次。例如,zo* 会匹配 “z” 以及 “zoo”。* 等同于 {0,}。 |
+ | 匹配之前的字符或子表达式一次或多次。例如,’zo+’ 匹配 “zo” 以及 “zoo”,但不匹配 “z”。 + 等同于 {1,}。 |
? | 匹配之前的字符或子表达式零次或一次。例如,”do(es)?” 匹配 “do” 在 “do” 或 “does” 中。? 等同于 {0,1}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不匹配 “Bob” 中的 “o”,但与 “food” 中的两个 o 匹配。 |
{n,} | n 是一个非负整数。匹配至少 n 次。例如,’o{2,}’ 不匹配 “Bob” 中的 “o”,单匹配 “foooood” 中的所有 o。and matches all the o’s in “foooood”. “o{1,}” 等同于 ‘o+’。 ‘o{0,}’ 等同与 ‘o*’。 |
{n,m} | m 和 n 都要是非负整数,n <= m。匹配至少 n 次,最多 m 次。例如,”o{1,3}” 与 “fooooood”中的前三个 o 向匹配。 ‘o{0,1}’ 等同于 ‘o?’。要注意的是你不能在逗号与数字之间加一个空格。 |
? | 当这个字符紧跟着任何其他数量词 (*, +, ?, {n}, {n,}, {n,m}) 时,匹配的模式是非贪婪。一个非贪婪模式尽可能少地与搜索字符串匹配,而默认的贪婪模式则尽可能多地与搜索字符串匹配。例如,字符串 “oooo”,’o+?’ 匹配单一的一个 “o”,而w ‘o+’ 匹配所有 ‘o’。 |
. | 与任何单一字符串匹配。例如,”.e” 匹配任何在 “e” 之前的文字,如 “he”,”we”,或 “me”。 在 EmEditor Professional 中,它匹配搜索正则表达式的附近行文本框中指定范围内的换行当正则表达式 “.” 匹配换行符复选框被勾选。 |
(pattern) | 括号有两个作用: 把一个格式组合到一个子表达式中,以及捕捉生成该匹配的格式。例如,表达式 “(ab)*” 匹配所有字符串 “ababab”。每一个子表达式的匹配被捕捉为一个从左到右编号的向后引用(如下)。要匹配括号字符,用 ‘(‘ 或 ‘)’。 |
1 – 9 | 指定一个向后引用 – 一个向后引用是上一个被匹配的子表达式的引用。引用的内容是与子表达式相匹配的内容,而不是表达式本身。一个向后引用由转义符 “” 加一个 “1” 到 “9” 的数字组成。”1″ 指的是第一个子表达式,”2″ 是第 2 个,以此类推。例如,”(a)1″ 会捕捉 “a” 为第一个向后引用,并匹配任何 “aa” 文本。你还可以使用向后引用功能当你在搜索菜单下选择替换功能时。用正则表达式来定位一个文本格式,与之相匹配的文本能被一个指定的向后引用替换。例如,”(h)(e)” 的表达式会在文本中查找 “he”,把 “1” 放在替换为文本框中会用 “h” 取代 “he”, 而如果是 “21” 的话,则会用 “eh” 取代 “he” 。 |
(?:pattern) | 一个与格式相匹配,但不捕获该匹配的子表达式,这是一个不能用向后引用来存储的非捕获匹配。这个表达式通常和 “or” 字符 (|) 组合使用。例如,’industr(?:y|ies) 是一个比 ‘industry|industries’ 更实用的表达式。 |
(?=pattern) | 子表达式执行匹配 lookahead 搜索,查找任何后面跟着符合的模式的字符串。例如,”x(?=abc)” 与 “x”相匹配仅当字符串后面跟着 “abc” 表达式时。 这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。 |
(?!pattern) | 子表达式执行非匹配 lookahead 搜索,查找任何后面没有跟着符合的模式的字符串。例如,”x(?!abc)” 与 “x” 相匹配只有当该字符串后面不跟着 “abc” 表达式时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。 |
(?<=pattern) | 子表达式执行匹配 lookbehind 搜索,查找任何前面是符合的模式的字符串。例如,”(?<=abc)x” 匹配一个 “x” 只有当它前面有表达式 “abc”时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。模式必须是固定长度。 |
(?<!pattern) | 子表达式执行非匹配 lookbehind 搜索,查找任何前面不是符合模式的字符串。例如,”(?<!abc)x” 匹配 “x” 只有当它前面不跟着 “abc” 表达式时。这是一个不能用向后引用来存储的非捕获匹配。模式不包含换行。模式必须是固定长度。 |
x|y | 与 x 或 y 向匹配。例如,’z|food’ 与 “z” 或 “food” 匹配。'(z|f)ood’ 与 “zood” 或 “food” 匹配。 |
[xyz] | 字符集。匹配任何在括号内的字符。例如,'[abc]’ 与 “plain” 中的 ‘a’ 相匹配。 |
[^xyz] | 负字符集。匹配任何不在括号内的字符。例如,[^abc]’ 与 “plain” 中的 ‘p’ 相匹配。 |
[a-z] | 字符范围。与任何指定范围的字符相匹配。例如,'[a-z]’ 与任何 ‘a’ 到 ‘z’ 的小写字母相匹配。 |
[^a-z] | 负字符范围。与任何不在指定范围内的字符相匹配。例如,'[a-z]’ 与任何不在 ‘a’ 到 ‘z’ 范围内的字符相匹配。 |
字符类
下面的字符类被用在字符集中,例如 “[:classname:]”。例如,”[[:space:]]” 是所有空白字符的集合。
alnum | 任何语言字符及数字: 字母,音节或表意字符。 |
alpha | 任何语言字符: 字母,音节或表意字符。 |
blank | 任何空白字符,空格或 tab。 |
cntrl | 任何控制字符。 |
digit | 任何 0-9 的数字。 |
graph | 任何图形字符。 |
lower | 任何 a-z 的小写字符,以及其他小写字符。 |
任何可打印的字符。 | |
punct | 任何标点字符。 |
space | 任何空白字符。 |
upper | 任何 A-Z 的大写字母,以及其他大写字符。 |
xdigit | 任何十六进制数字字符,0-9,a-f 还有 A-F。 |
word | 任何单词字符 – 所有字母数字字符以及下划线。 |
unicode | 任何大于 255 代码的字符。 |
单一字符转义序列
下列转义序列是单一字符的别名:
0x07 | a | 响铃字符。 |
0x0C | f | 换页 (FF)。 |
0x0A | n | 换行字符。 |
0x0D | r | 回车符。 |
0x09 | t | Tab 字符。 |
0x0B | v | 垂直 tab。 |
0x1B | e | ASCII 转义符。 |
0dd |