我有一个正则表达式来检查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
现在,当这种模式在正则表达式测试中运行良好时会出现什么问题。
答案 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"