带有正则表达式的文字中的转义序列无效

时间:2016-12-28 07:16:07

标签: ios swift string

我用:

定义一个字符串
static let Regex_studio_tel = "^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$"

但是有一个问题:

  

文字

中的转义序列无效

图片我的标记:

enter image description here

修改-1

我的要求是匹配特殊的平面号使用Regex,例如:

我公司有一个特殊的飞机号码:

028-65636688 or 85317778-8007  

// aaa-bbbbbbbb-ccc我们知道aaa是前缀,它表示城市拨号代码,bbbbbbbb是主要电话号码,cccc是固定电话的分机号码,

例如我公司的固定电话是028-65636688,也许我们公司有10个分机号码:028-65636688-8007 ,028-65636688-8006,028-65636688-8005,依此类推。 当然,它最后可能有一个分号。

028-65636688-2559

2 个答案:

答案 0 :(得分:20)

两个字符序列\ -不是Swift String中的有效转义序列。如果您需要将\ -传递给NSRegularExpression作为模式,则需要在Swift String文字中编写\\-

所以,你的行应该是这样的:

static let Regex_studio_tel = "^(0[0-9]{2,3}\\-)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?$"

<强> ADDITION

正如Rob评论的那样,当出现在[ ]之外时,减号不是正则表达式中的特殊字符,因此您可以将其写为:

static let Regex_studio_tel = "^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$"

答案 1 :(得分:1)

我猜你的意图是逃避-个字符。但这不是必要的(而且是不正确的)。如果你的意图只是匹配破折号,你应该完全删除那些反斜杠:

let pattern = "^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$"

无关,但我对+字符持怀疑态度。您是否真的想要匹配一次或多次[2-9][0-9]{6,7}次?或者你想要恰好匹配一次?