Swift正则表达式:如何在RegexBuilder中表示取反逻辑?
使用RegexBuilder实现匹配非数字字符的正确写法
要实现等价于正则表达式/[^0-9]/(匹配0-9以外的非数字字符)的RegexBuilder代码,之前尝试的两种写法均无法达到预期效果:
// 错误写法1 private let pattern = Regex { Capture { Not(.digit) } }
// 错误写法2 private let pattern = Regex { Capture { !CharacterClass(.digit) } }
正确实现方式
匹配非数字字符的正确RegexBuilder写法有两种:
写法一:明确构造反选字符类
private let pattern = Regex { Capture { CharacterClass(.any, .not(.digit)) } }
写法二:简化的反选语法
private let pattern = Regex { Capture { !.digit } }
错误原因解析
- 第一种错误写法中的
Not(.digit)是逻辑非断言,它仅用于判断当前位置后是否不是数字,不会实际匹配并捕获任何字符,因此无法实现需求。 - 第二种写法的
!CharacterClass(.digit)属于语法错误,CharacterClass不支持直接通过!运算符取反,必须使用规范的字符类构造方式来创建反选规则。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

