EmEditor 正则表达式语言基于 Perl 正则表达式语法。

文字

所有字符都是文字除了: ".", "*", "?", "+", "(", ")", "{", "}", "[", "]", "^", "$" 和 "\"。这些字符代表文字当之前有一个 "\" 时。一个文字是一个与它自己相匹配的字符。例如,搜索 "\?" 会匹配每一个在文档中的 "?" ,或搜索 "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"。每一个子表达式的匹配被捕捉为一个从左到右编号的向后引用(如下)。要匹配括号字符,用 '\(' 或 '\)'。
(?<name>pattern) 捕获与 "pattern" 匹配的字符串到 "name" 群组中。
\1 - \9 指定一个向后引用 - 一个向后引用是上一个被匹配的子表达式的引用。引用的内容是与子表达式相匹配的内容,而不是表达式本身。一个向后引用由转义符 "\" 加一个 "1" 到 "9" 的数字组成。"\1" 指的是第一个子表达式,"\2" 是第 2 个,以此类推。例如,"(a)\1" 会捕捉 "a" 为第一个向后引用,并匹配任何 "aa" 文本。你还可以使用向后引用功能当你在搜索菜单下选择替换功能时。用正则表达式来定位一个文本格式,与之相匹配的文本能被一个指定的向后引用替换。例如,"(h)(e)" 的表达式会在文本中查找 "he",把 "\1" 放在替换为文本框中会用 "h" 取代 "he", 而如果是 "\2\1" 的话,则会用 "eh" 取代 "he" 。
\k<name> 表示一个已命名的向后引用。已命名的向后引用是用以下形式引用之前匹配的已命名的捕获组:(?<name>expression)。如果 "name" 是一个数字,则它表示一个已编号的向后引用,相当于 \1,\2,\3,...。
(?: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 开始的序列。

替换表达式

当用正则表达式或数字范围取代时,可以用替换表达式。

下列表达式是可用于替换对话框以及在文件中替换对话框中的替换为文本框内。

\0 把整个正则表达式作为指定为向后引用。
\1 - \9 指定一个向后引用 - 一个向后引用是上一个被匹配的子表达式的引用。引用的内容是与子表达式相匹配的内容,而不是表达式本身。一个向后引用由转义符 "\" 加一个 "1" 到 "9" 的数字组成。"\1" 指的是第一个子表达式,"\2" 是第 2 个,以此类推。
$10, $11, $12, ... 表示超过 9 个的向后引用。相当于 \k<10>,\k<11>,\k<12>,...。
\k<name> 表示一个已命名的向后引用。已命名的向后引用是用以下形式引用之前匹配的已命名的捕获组:(?<name>expression)。如果 "name" 是一个数字,则它表示一个已编号的向后引用,相当于 \1,\2,\3,...。
\n 一个换行符。
\r 在文件中替换表示一个回车符。
\t 一个 tab。
\L 强制所有后续替换字符要小写。
\U 强制所有后续替换字符要大写。
\H 强制所有后续替换字符要是半角字符。
\F 强制所有后续替换字符要是全角字符。
\Nc 强制使用 Unicode 标准化表单 C(规范组成) 转换所有后续替换字符。
\Nd 强制使用 Unicode 标准化表单 D(规范分解) 转换所有后续替换字符。
\NC 强制使用 Unicode 标准化表单 KC(兼容性组成) 转换所有后续替换字符。
\ND 强制使用 Unicode 标准化表单 KD(兼容性分解) 转换所有后续替换字符。
\E 关闭之前的 \L,\U,\F,\H,\Nc,\Nd,\NC,或 \ND。
\J 指定表达式使用 JavaScript。\J 必须放在替换表达式的开头。可以与反向引用结合使用。还可以在脚本中使用 cell 函数。例如,

替换表达式 含义
\J "\0" + "abc" 合并匹配字符串与 "abc"
\J "\0".substr( 0, 5 ); 返回匹配字符串的前 5 个字符
\J \0 * 100; 将匹配的数字乘以 100
\J parseFloat( \0 ).toFixed(2); 将匹配的数字四舍五入到小数点后 2 位
\J cell( -1 ) 返回位于匹配单元格左侧相邻单元格中的文本
\J parseFloat( cell( -1 ) ) + parseFloat( cell( -2 ) ) 返回左侧两个相邻单元格的总和
\D 如果 数字范围表达式 的日期/时间类型用于匹配字符串,则此表达式可以指定日期格式。它可以与 \T 结合使用。查看可用的日、月、年格式。例如,如果匹配的日期/时间是 "2022-03-31 21:30":(示例的语言环境是英语(美国))

替换表达式 结果
\DM/d/yyyy 3/31/2022
\DMMMM, d, yyyy March 31, 2022
\D'month='M 'day='d \THH:mm month=3 day=31 21:30
\T 如果 数字范围表达式 的日期/时间类型用于匹配字符串,则此表达式可以指定时间格式。它可以与 \D 结合使用。查看可用小时、分钟 , 和第二种格式。例如,如果匹配的日期/时间是   "2022-03-31 21:30":(示例的语言环境是英语(美国))

替换表达式 结果
\THH:mm 21:30
\Th:mm tt 9:30 PM
\THH:mm\D-yyyy-MM-dd 21:30-2022-03-31
(?Ntrue_expression:false_expression) 如果匹配子表达式 N,则评估 true_expression 并将其发送到输出,否则评估 false_expression 并将其发送到输出。例如,(?1foo:bar),如果匹配子表达式 \1,会用 foo替换每个匹配,反之则用 bar。另外,您也可以用这种方式写该表达式:(?{1}foo:bar)
$(Path) 文件路径。
$(Dir) 文件目录。
$(Filename) 不带扩展名的文件名。
$(FilenameEx) 带扩展名的文件名。
$(Ext) 扩展名。
$(Lines) 行数(不能用于在文件中替换)。
$(CsvColumns) CSV 列数(不能用于在文件中替换)。

正则表达式的例子有哪些?

  • 被双引号包围字符串
    ".*?"
  • 被 [ ] 包围的字符串
    \[[^\[]*?\]
  • 变量名称
    [a-zA-Z_][a-zA-Z_0-9]*
  • IP 地址
    ([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})
  • URL
    (\S+)://([^:/]+)(:(\d+))?(/[^#\s]*)(#(\S+))?
  • 后面跟一个标签(tab)的行
    \t.*$
  • 平假名
    [\x{3041}-\x{309e}]
  • 全角片假名
    [\x{309b}-\x{309c}\x{30a1}-\x{30fe}]
  • 半角假名
    [\x{ff61}-\x{ff9f}]
  • CJK 表意文字
    [\x{3400}-\x{9fff}\x{f900}-\x{fa2d}]
  • CJK 表意文字标记
    [\x{3000}-\x{3037}]
  • 韩文
    [\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}]
  • 在行的开头插入 //
    查找: ^
    替换为: //
  • 在行的开头去除 //
    查找: ^//
    替换为:
  • 清除尾部空格
    查找: \s+?$
    替换为:
  • 把 (abc) 替换为 [abc]
    查找: \((.*?)\)
    替换为: \[\1\]
  • 把 <H3 ...> 替换为 <H4 ...>
    查找: <H3(.*?)>
    替换为: <H4\1>
  • 把 9/13/2003 替换为 2003.9.13
    查找: ([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})
    替换为: \3\.\1\.\2
  • a 到 z 的大写字符
    查找: [a-z]
    替换为: \U\0
  • 使所有单字大写
    查找: ([a-zA-Z])([a-zA-Z]*)
    替换为: \U\1\L\2

Perl正则语法参考:

Perl Regular Expression Syntax - 1.76.0https://www.boost.org/doc/libs/1_76_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

本文出自EmEditor官方中文帮助文档,为了方便记忆查看,特整理出来。

EmEditor 正则表达式语法相关推荐

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

    缙哥哥非常懒,当遇到重复的事情时,就喜欢通过批量处理来解决,而文本用的是 EmEditor 程序,EmEditor 正则表达式语言基于 Perl 正则表达式语法,所以通过掌握EmEditor正则表达式 ...

  2. python中的正则表达式语法_Python基础教程之正则表达式基本语法以及re模块

    什么是正则: 正则表达式是可以匹配文本片段的模式. 正则表达式'Python'可以匹配'python' 正则是个很牛逼的东西,python中当然也不会缺少. 所以今天的Python就跟大家一起讨论一下 ...

  3. 正则表达式 – 语法

    特别字符 描述 $ 匹配输入字符串的结尾位置.如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'.要匹配 $ 字符本身,请使用 \$. ( ) 标记一个 ...

  4. js正则表达式语法大全_一条正则表达式闹的乌龙

    "实战Elisp"系列旨在讲述我使用Elisp定制Emacs的经验,抛砖引玉,还请广大Emacs同好不吝赐教--如果真的有广大Emacs用户的话,哈哈哈. 序言 我要编写一个Eli ...

  5. java 正则表达式 demo_JAVA正则表达式语法

    JAVA正则表达式语法(转) 正则表达式语法 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符").模式描述在搜索文本时要匹配的一个或 ...

  6. (常用API)正则表达式语法规则

    正则表达式的匹配规则 参照帮助文档,在Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写字母.我们来学习语法规则. 正则表达式的语法规则: 字符:x 含义:代表的是字符x 例如:匹 ...

  7. (转)JAVA正则表达式语法大全

    [正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n ...

  8. Delphi 正则表达式语法(9): 临界匹配 - 也叫预搜索与反向预搜索

    Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 varreg: TPerlRegEx; beginreg := ...

  9. 正则表达式语法(转)

    正则表达式 - 语法 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件 ...

最新文章

  1. element table多选只能选中当前页数据_element-ui里的el-table 前端分页
  2. AI居然能算出情侶能交往多久?使用分析语音数据進行預測
  3. 创业互联网公司如何搭建自己的技术框架
  4. 使用SMARTFORM字段参数设置解决SMARTFORM中数量、金额字段显示问题
  5. iphone安装Deb文件
  6. surefire 拉起testng单元测试类的源码流程阅读(一)
  7. oracle求部门请假类别合计_【大话IT】求oracle sql 写法,找出同类的合计,所有的总计...
  8. c语言链表有没有哨兵的区别,链表中的哨兵(sentinel)
  9. QQ正式上线QID功能 用户可自定义专属身份卡
  10. 在官网下载最新版Java
  11. 2.PCIe协议分析
  12. 为保证云应用及虚拟串口功能正常使用,请务必下载安装Windows系统环境补丁
  13. mysql codesmith_CodeSmith MySql
  14. 上传身份证照片js_小程序上传身份证图片的实现方法
  15. tf.app.flags
  16. 相似图像识别算法是什么,机器图像识别常用算法
  17. android 如何关闭app,android 关闭app程序
  18. android-b9是什么设备,Android 设备上可以实现 3D Touch 吗?| 原力计划
  19. 狼人杀代码(c++)
  20. Oracle Chp3 复杂查询 key point:数据分页;子查询;表连接;集合运算符

热门文章

  1. 蔡依林(Jolin) 2008 北京演唱会
  2. 计算机名字还原,能还原原始文件名的数据恢复软件
  3. 手工自制双面PCB板的方法
  4. HTML table表头在左侧,HTML Table锁定表头(CSS实现)
  5. 威盾php官网,威盾PHP加密专家解密算法
  6. 遇到问题---eks--gitlab-runner----docker dns解析失败---docker build Temporary failure in name resolution
  7. 菲波拉契数列的通项公式
  8. 零基础利用Python库you-get下载b站等视频网站的视频(会员视频需有账号并且设置cookie)
  9. JavaScript 实现汉字转拼音 方案一
  10. JS计算请假时间(起始时间与终止时间)