Swift正则表达式(RegEx)语法规范官方文档位置查询
核心疑问
Swift语言原生正则表达式(RegEx)的语法规范文档在哪里?比如它支持哪些字符类、哪些匹配结构?我在官方文档里只能找到编程层面的支持内容,但实际使用的是/.../这类正则语法。每种编程语言的正则基本都是PCRE的子集,应该有文档明确说明支持哪些语法元素(以及不支持的)——比如Swift支持\d、\w,但是否支持\N?前瞻、后顾以及各类捕获组的支持情况如何?
正则语法标准化背景
目前仅有三种官方标准化的正则表达式语法:
- Simple Regular Expressions (SRE):已弃用
- Basic Regular Expressions (BRE)
- Extended Regular Expressions (ERE)
这三种由IEEE 1992年发布的POSIX.2标准定义,有明确的标记规则和匹配过程说明。
Perl在1987年发布时,正则表达式尚无统一标准,因此推出了自己的规范,也就是后来的Perl Compatible Regular Expressions (PCRE)。
如今C语言的regex.h API仅支持BRE和ERE(默认使用BRE),多数现代编程语言基于PCRE子集实现,但子集范围因语言而异:
- ERE中匹配数字需用
[[:digit:]],匹配非数字用[^[:digit:]] - PCRE中匹配数字用
\d,匹配非数字用\D(Perl同时兼容ERE语法)
不同语言对PCRE元素的支持存在差异,比如PHP支持\N,但Python、Go、Java、.NET和Rust均不支持,这类问题不应通过试错判断,每种语言都应有对应的语法文档参考,例如:
- Perl:官方正则语法参考文档
- PHP:PCRE模式语法说明文档
- Python:正则表达式使用指南
注意:NSRegularExpression不是Swift原生引擎
虽然可以在macOS的Swift环境中借助Foundation框架使用NSRegularExpression,且其文档包含完整的语法表格,但这并非Swift语言内置的原生正则引擎。
NSRegularExpression基于ICU正则引擎,是针对Unicode处理优化的PCRE子集,但Swift明确不采用ICU引擎,因为ICU的字符串处理逻辑与Swift字符串实现存在根本性冲突,会产生大量转换开销。
内容的提问来源于stack exchange,提问作者Mecki

