Skip to content

Latest commit

 

History

History
100 lines (63 loc) · 5.11 KB

feature_overview.md

File metadata and controls

100 lines (63 loc) · 5.11 KB

常用语言正则特性一览表

本页内容节选自《正则指引》(第2版)

字符组 (character class)

特性 .NET Java JavaScript PHP Python Ruby Objective-C Golang
\Q…\E × × × ×
\w \s \d 说明1 ASCII匹配规则 ASCII匹配规则,\s除外 ASCII匹配规则 说明2 ASCII匹配规则 Unicode匹配规则 ASCII匹配规则
POSIX字符组 × ASCII字符 x ASCII字符 x 说明3 x ASCII字符

括号相关 (parentheses)

特性 .NET Java JavaScript PHP Python Ruby Objective-C Golang
表达式中使用\1\9 引用分组
替换中引用分组 $num $num $num $num \g<num> \num $num $num
命名分组 说明4 x x 说明5 说明6 说明7 说明8 说明9

断言 (assertion)

特性 .NET Java JavaScript PHP Python Ruby Objective-C Golang
\b(与\w规则相同) 说明10 说明11 说明12
^ 说明13
$ 说明14 同上
\A ×
\z × ×
\Z × 说明15 ×
(?=regex) (?!regex) ×
(?<=regex) (?<!regex) 说明16 说明17 说明18 说明19 说明20 说明21 ×

匹配模式 (match mode)

特性 .NET Java JavaScript PHP Python Ruby Objective-C Golang
不区分大小写模式 i
单行模式 s
多行模式 m 22
注释模式 x × ×
(?-modifier)停用模式 × ×
(?modifier:regex)模式仅限括号内表达式 × ×

Unicode

特性 .NET Java JavaScript PHP Python Ruby Objective-C Golang
Unicode Property × × 23
Unicode Script × × × × 同上 无文档但可用 无文档但可用
Unicode Block × × × × × ×

Footnotes

  1. 可以指定 RegexOptions.ECMAScript 恢复到ASCII匹配规则

  2. Python 2默认采用ASCII匹配规则,但指定 Re.U 模式可以变换为Unicode匹配规则;Python 3默认采用Unicode匹配规则,但指定 Re.A 模式可以变换为ASCII匹配规则

  3. Ruby 1.9的POSIX字符组支持Unicode字符,且 不需要 显式指定Unicode模式

  4. .NET中用 (?\<name>regex) 表示命名分组,用 \k<name> 在表达式中引用分组,替换中用 ${name} 引用命名分组

  5. PHP中用 ?P<name>regex) 表示命名分组,用 (P=name) 在表达式中引用分组,替换中 不能 引用命名分组

  6. Python中用 (?P<name>regex) 表示命名分组,用 (P=name) 在表达式中引用分组,替换中用 \g<name> 引用命名分组

  7. 只有Ruby 1.9支持命名分组,用 (?<name>regex) 表示命名分组,用 \k<name> 在表达式中引用分组,替换中用 \k<name> 引用命名分组

  8. Objective-C中用 (?<name>regex) 表示命名分组,用 \k<name>在表达式中引用分组,在替换中引用的方法未知

  9. Golang中用 (?P<name>regex) 表示命名分组,命名分组的反向引用和在替换中引用的方法未知

  10. Java中的 \w 采用 ASCII匹配规则,但 \b 采用 Unicode匹配规则

  11. Ruby 1.9中的 \b 采用 Unicode匹配规则

  12. Objective-C中 \b\w 默认采用 Unicode匹配规则,如果指定ASCII匹配规则,受影响的只有 \b

  13. Ruby默认采用多行模式,^$ 可以匹配 行的起始或结束位置

  14. JavaScript中的 $ 无法匹配 文本末尾行结束符之前的位置

  15. Python中的 \Z 等价于其他语言中的 \z

  16. 逆序环视中的正则表达式能匹配的文本长度必须有上限

  17. JavaScript必须到 ES2017(TC39)之后才支持逆序环视,此时逆序环视的表达式没有限制

  18. PHP中的逆序环视中的正则表达式匹配文本的长度可以不确定,可以是若干个值,但必须是固定值,多选结构只能出现在顶层

  19. Python的逆序环视中的正则表达式匹配的文本长度必须是固定的

  20. Ruby 1.8 不支持 逆序环视,Ruby 1.9的逆序环视中的正则表达式匹配的文本长度 必须是固定的

  21. 逆序环视中的正则表达式能匹配的文本长度必须有上限

  22. Ruby 默认采用多行模式

  23. 只有Ruby 1.9支持,使用时需 显式指定Unicode模式