无法在Objective C中创建Regex

时间:2016-08-19 11:30:17

标签: ios objective-c regex

我有一个正则表达式来检查Max 70 alphanumeric characters and special characters: ' / \\ - ; @ and space我正在使用以下正则表达式模式 -

^[a-zA-Z0-9,.-\s'\\\/@]{0,70}$

请注意:在https://regex101.com中进行测试非常正常

以下代码将其与字符串匹配 -

NSString *String = area@123\\
NSRegularExpression *regex  = [NSRegularExpression regularExpressionWithPattern:@"^[a-zA-Z0-9,.-\s'\\\/@]{0,70}$" options:NSRegularExpressionCaseInsensitive error:&error];

NSAssert(regex, @"Unable to create regular expression");
NSRange textRange   = NSMakeRange(0, string.length);
NSRange matchRange  = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];

最初它显示转义序列错误,我将模式更改为 - ^[a-zA-Z0-9,.-\\s'\\\\//@]{0,70}$

现在它导致了消息 -

Assertion failure in +[UMValidations validateString:withPattern:]
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to create regular expression

现在,当这种模式在正则表达式测试中运行良好时会出现什么问题。

1 个答案:

答案 0 :(得分:2)

当你在Objective-C中编写正则表达式模式时,带有特殊字符的反斜杠必须加倍。此外,您还需要转义连字符(或将其放在字符类的开头/结尾)。

$name = new TableName() ;
$result=DB::table($name->getTableName())->select()->get();

您无需转义@"^[a-zA-Z0-9,.\\-\\s'\\\\/@]{0,70}$" ^^ ^^ ^^^^ 。您需要使用4个反斜杠来定义文字/,因为正则表达式引擎使用文字反斜杠(在定义为\的Objective-C字符串文字中)来转义特殊字符并表示文字{{ 1}},Objective-C字符串文字中的文字反斜杠必须加倍(文字字符串模式中的"\\"(因此,定义为\)将匹配文字\\输入)。重点是字符串文字中的"\\\\"可以形成转义序列,如\(换行符)或\(回车)等。因此,有两层转义:一个用于Objective-C引擎,另一个用于正则表达式(在本例中为ICU)库。

请参阅Objective-C demo

"\n"