网页编辑器中的正则表达式支持受 Lucene Regex 引擎实现的限制。
要使用正则表达式,请在筛选设置中启用 。筛选输入字段中的绿色复选标记表示有效正则表达式的验证成功。
查询默认不区分大小写。在筛选设置中启用 以使其区分大小写。
(确保仅匹配完整单词,而不匹配较长单词中的子字符串)不可用。
查询 ^abc$ 将按预期工作,即匹配整个句段,而 将匹配任何文本中的子字符串 abc。
限制
不支持部分格式化查询的正确替换,例如在文本“First name<}: Bob, Last name: Dylan.”中搜索“\"Jméno: $1, Příjmení: $2.\"”将被替换为“{>Jméno: Bob, Příjmení: Dylan”
不支持的模式
-
用于匹配确切单词的单词边界锚点
\\b(在桌面编辑器中有效)。 -
\\\\[1-9]- 后向引用(\\1、\\2 等),例如(\\w+)\\s+\\1用于匹配重复的单词,如“hello hello” -
\\(\\?=|\\(\\?!|\\(\\?<=|\\(\\?<!- 环视(前瞻和后顾),例如cat(?=\\.jpg)仅匹配“cat.jpg”中的“cat” -
\\(\\?:- 非捕获组,例如 (?:Mr|Mrs|Ms)\\. \\w+,,但支持捕获组(Mr|Mrs|Ms)\\. \\w+并匹配“Mrs. Smith”、“Mr. Brown”等名称 -
\\(\\?#- 内联注释,例如\\d\{4\}-(?# year)\\d\{2\}-(?# month)\\d\{2\}(?# day)以匹配“2025-06-25” -
\\(\\?P<[^>]+>- 命名捕获组,例如 (?P<amount>\\d+)\\s?(?P<currency>USD|EUR)以匹配“150 USD”和“99 EUR”
点 (.) 作为任何单个字符的占位符
-
c.at:匹配:“chat”、“coat”。不匹配:“cat”、“cheat” -
wa.ter:匹配:“waiter”、“waster”。不匹配:“water” -
s.ip:匹配:“skip”、“ship”、“slip”。不匹配:“sip”、“strip”
? - 零个或一个出现次数
-
colou?r:匹配:“color”、“colour” -
g?rain:匹配:“grain”、“rain” -
books?:匹配:“book”、“books”
.* - 任意数量的字符(包括零个)
-
h.*y:匹配:“happy”、“history”、“honey” -
sa.*d:匹配:“sad”、“sand”、“satisfied” -
m.*ing:匹配:“morning”、“meeting”、“marketing”
.+ - 必须出现至少一个字符
-
pa.+er:匹配:“paper”、“painter” -
a.+ed” 匹配:“asked”、“accepted”、“allowed”
* - 零个或多个出现次数
-
go*al:匹配:“goal”、“goooooooal”
+ - 一次或多次出现
-
no+:匹配:“no”、“noooooo” -
$1+:匹配:“$1”、“$11”、“$111”
建议使用尽可能具体的模式,因为开放式模式可能会导致编辑器出现性能问题。
重要
编辑器对正则表达式模式的复杂程度有内置限制。过于宽泛或大量使用通配符的模式可能会作为无效的正则表达式而失败。为避免这种情况:
-
保持模式简短且具体。
error-[0-9]\{3\}可以;.*a.*b.*c.*d.*则不行。 -
尽量减少通配符的使用。每个
.+或.*都会成倍增加内部复杂性。尽可能使用像[A-Z]+这样的字符类,而不是.*。 -
避免使用带有重复的长交替。像
(word1|word2|...|word20){2,}这样的模式会很快超过限制。当替代项包含多个单词或标点符号时,这种情况会加剧,这会增加正则表达式的复杂性。 -
尽可能锚定一侧。
^prefix.*比.*middle.*的开销小得多。
如果模式被拒绝,请尝试使其更具针对性:从更长的固定前缀开始,然后在此基础上缩小范围。考虑减少替代项的数量,或者在单独的模式中处理它们,而不是将所有内容合并为一个复杂的正则表达式。
示例:
-
[A-Z]+:匹配连续的一个或多个大写字母(序列)。 -
[A-Z]{2,}:匹配任何大写字母序列(例如,对于匹配首字母缩略词或以大写字母书写的 Strings 非常有用) -
[0-9]\{4\}:匹配四位数字,例如“1999”、“2003”、“1876”(也会在长于四位的字符串中找到;若要限制结果,应使用计划在未来推出的“匹配单词”选项) -
[A-Za-z0-9]+:匹配任何字母数字字符串(hello! → hello 将会匹配,但 ! 不属于 [A-Za-z0-9];100% → 仅 100 会匹配) -
([A-Za-z]+\\d+|\\d+[A-Za-z]+):严格匹配数字和字母的组合,例如“user123”、“Admin99”、“Win11”、“5g”、“1080p” -
[0-9]{2,4}-[A-Z]{2,3}:匹配车牌,例如“12-XY”、“9999-ABC”
-
\\+[0-9]{1,2}:匹配“+40”、“+1” -
\\{version: [0-9]+\\}:匹配“{version: 12}”、“{version: 13}” -
C:\\\\[A-Za-z]+:匹配“C:\\Users”、“C:\\Documents”、“C:\\Desktop”
-
默认情况下,正则表达式过滤将实现为不区分大小写。
c.at:匹配:“chat”、“Chat”、“CHAT”以及“coat”、“Coat”、“COAT” -
正则表达式筛选可以与 UI 筛选结合使用
正则表达式捕获组会被识别,并且完整查询会被高亮显示,例如 s(e)g 将高亮显示“seg”。捕获组可用于替换,例如“Name: Bob”可以通过 Name: (.*?) 查询并使用反向引用 Jméno: $1 进行替换。缺失的反向引用会被妥善处理,即查询 Name: (.*?) 并使用替换 Jméno: $1, Title: $2 将被替换为 Jméno: Bob, Title: $2。
替换反向引用的示例:
-
筛选
(\\d+),(\\d+)并替换$1.$2以规范化十进制分隔符(例如从 5,6 或 35,949 到 5.6 或 35.949) -
筛选
(\\d+)\\.(\\d+)并替换$1,$2以规范化十进制分隔符(例如从 5.6 或 35.949 到 5,6 或 35,949) -
筛选
(\\d\{4\})-(\\d\{2\})-(\\d\{2\})并替换$3/$2/$1以重新格式化日期(例如从 2025-06-05 到 05/06/2025) -
筛选
ID-(\\d{3,})并替换Ticket #$1以提取工单编号(例如从 到 ) -
筛选
(cat|dog)并替换$1-$1以复制匹配的文本(例如从 cat 到 cat-cat,从 dog 到 dog-dog) -
可选组: 筛选
Hello(, (\\w+))?并替换Hi $1以转换问候语,通过替换名字前或单独的“Hello”(例如从 到 ,从 到 )