如何在Swift正则表达式字面量中指定匹配选项?
Swift正则字面量添加搜索标记的正确写法
你遇到的错误是因为Swift的正则字面量语法不支持直接在斜杠后写mi这种缩写标记——编译器会把mi当成一个不存在的变量,所以报「Cannot find 'mi' in scope」。
正确添加标记有两种方式:
方式一:内联标记写法
把标记放在正则开头的(?...)中,这是正则标准的内联标记语法,Swift完全支持:
let regex = /(?mi)^foo/
这里(?mi)表示同时启用不区分大小写(i)和多行模式(m),^会匹配每行的开头而非整个字符串的开头。
方式二:通过Regex初始化器传入选项
如果你觉得内联标记不够直观,可以用Regex的初始化器,明确指定选项参数:
let regex = Regex(/^foo/, options: [.caseInsensitive, .anchorsMatchLines])
其中:
.caseInsensitive对应i标记.anchorsMatchLines对应m标记
另外给你列几个常用标记和Swift选项的对应关系:
i→.caseInsensitive(不区分大小写)m→.anchorsMatchLines(多行模式)s→.dotMatchesNewlines(让.匹配换行符)x→.allowCommentsAndWhitespace(忽略正则里的空格和注释)
内容的提问来源于stack exchange,提问作者Aleksandr Medvedev
相关产品推荐
相关产品推荐

