缙哥哥的博客
与你分享我的点点滴滴生活

掌握EmEditor正则表达式语法,大大提升工作效率

缙哥哥非常懒,当遇到重复的事情时,就喜欢通过批量处理来解决,而文本用的是 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”, 而如果是 “\2\1” 的话,则会用 “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 的小写字符,以及其他小写字符。
print 任何可打印的字符。
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 \0dd 八进制字符代码,dd 是一个或多个八进制数字。
0xXX \xXX 一个十六进制字符代码,XX 是一个或多个十六进制数字 (一个 Unicode 字符)。
0xXXXX \x{XXXX} 一个十六进制字符代码,XXXX 是一个或多个十六进制数字 (一个 Unicode 字符)。
Z-‘@’ \cZ Z-‘@’ 一个 ASCII 转义序列控制-Z,其中 Z 是任一 ASCII 字符大于或等于 ‘@’ 的字符代码。

单词边界

下列转义序列与单词的边界相匹配:

\< 匹配一个单词的开头。(仅限 Boost.Regex)
\> 匹配一个单词的结尾。(仅限 Boost.Regex)
\b 匹配单词的边界(一个单词的开头或结尾)。
\B 仅当不在单词边界处时匹配。

字符类的转义序列

下列转义序列能被用来表示整个字符类:

\w 任何单词字符 – 所有字母数字字符加下划线。
\W \w 的补集 – 查找任何非单词的字符。
\s 任何空白字符。
\S \s 的补集。
\d 任何 0-9 的数字。
\D \d 的补集。
\l 任何 a-z 的小写字符。
\L \l 的补集。
\u 任何 A-Z 的大写字符。
\U \u 补集。
\C 任何单一字符,等同与 ‘.’。
\Q 开始引述运算符,任何跟在该符号后面的内容会被作为一个文本字符直到找到 \E 结束引述运算符。
\E 结束引述运算符,终止一个由 \Q 开始的序列。

指定换行符

下列表格显示如何指定换行符。

“查找”对话框,“替换”对话框 – 查找,替换为

勾选“使用正则表达式” \n 或 \r\n(相同含义)
不勾选“使用正则表达式”(使用转义序列) \n 或 \r\n(相同含义)

“在文件中查找”对话框,“在文件中替换”对话框 – 查找

勾选“使用正则表达式” \r\n,\r,或 \n(取决于实际的换行方式)
不勾选“使用正则表达式”(使用转义序列) \n 或 \r\n(相同含义)

“在文件中替换”对话框 – 替换为

勾选“保持修改的文件打开” 不勾选“保持修改的文件打开”
勾选“使用正则表达式” \r\n,\r,或 \n(取决于实际的换行方式) \r\n,\r,或 \n(取决于实际的换行方式)
不勾选“使用正则表达式”(使用转义序列) \n 或 \r\n(相同含义) \r\n,\r,或 \n(取决于实际的换行方式)

Tips

  • 如遇 “\n 或 \r\n(相同含义)”,你无法通过分辨 CR+LF,仅 CR,以及 仅 LF 来搜索换行。
  • 如遇 “\r\n,\r,或 \n(取决于实际的换行方式)”,你需要指定 “\r\n” 如果实际的换行是 CR+LF,”\r” 如果是仅 CR,或 “\n” 如果仅 LF。通常,CR+LF (\r\n) 被用在 Windows 操作系统中,CR (\r) 被用在 Macintosh 上,还有 LF (\n) 被用于 Unix。

注意事项

  • 在在文件中查找和在文件中替换中,回车符 (\r) 以及换行符 (\n) 必须仔细指明。更多信息,请参考指定换行。
  • 为了一些转义序列能在 EmEditor 中运作,例如 “\l”, “\u” 以及它们的补集,必须选择区分大小写的选项。

历史上的今天:

  1. 2018年:  《2018美国动作科幻狂暴巨兽/末日困兽战 BluRay-1080P 下载》- 作者:缙哥哥(0)
  2. 2018年:  《群辉NAS设置不同之间homes目录隔离并隐藏》- 作者:缙哥哥(0)
  3. 2018年:  《群辉Synology中Raid1和SHR有何区别?Raid0/1/5 都有何不同?》- 作者:缙哥哥(0)
  4. 2017年:  《5步教你如何拍星轨》- 作者:缙哥哥(2)
  5. 2014年:  《免费打电话,无需充值、无需签到、不限时长,没有任何限制的网络电话!》- 作者:缙哥哥(2)
赞(4) 打赏
转载请注明来源及链接:缙哥哥 » 掌握EmEditor正则表达式语法,大大提升工作效率

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏