NSRegularExpression不匹配锚点

时间:2015-10-15 11:38:10

标签: regex anchor nsregularexpression

嗨我有下面的NSRegular表达式,用于从字符串中提取坐标,例如使用ORSSerial通过串口传送的“167628,79009 \ r”。但是,表达式与8,79009相匹配,而不是先提供完整的ORSSerial在内部使用正则表达式来验证串行端口上的传入数据并传递截断的字符串。

如果我用“(\ d {5}),(\ d +)\ r \ n”替换正则表达式,它可以正常工作,但只有在传送的坐标是5位数字时才有用。如果我使用d {1,5},我会得到与使用line-start锚时相同的结果。

正则表达式忽略了锚点。有什么建议吗?

代码

coordinatePacketRegex = [[NSRegularExpression alloc] initWithPattern:@"^(\\d+),(\\d+)\r"
                                                               options:NSRegularExpressionAnchorsMatchLines
                                                                   error:&regexError];

1 个答案:

答案 0 :(得分:0)

好吧,说完了:

  

如果我用“(\ d {5}),(\ d +)\ r \ n”替换正则表达式,它可以工作,但这会   仅在传送的坐标为5位数时才有用。

您的实际问题是您使用的是NSRegularExpressionAnchorsMatchLines。它会在像“167628,79009 \ r \ n”这样的字符串上失败。不要使用此选项,而是使用零选项。

我建议使用:(\ d {5,}),(\ d +)\ r \ n(请注意,我在5之后添加了一个额外的逗号。将为“至少5位积分”的情况提供服务部分,在逗号之前尽可能多地捕获“。如果你没有用逗号前的最少5个字符,只需使用((\ d +),(\ d +)\ r)。拥有封闭的括号可以让你访问整个匹配为第0个捕获组。