繁体   English   中英

iOS - NSString正则表达式匹配

[英]iOS - NSString regex match

我有一个字符串例如:

NSString *str = @"Strängnäs"

然后我使用一个方法用*替换斯堪的纳维亚字母,所以它将是:

NSString *strReplaced = @"Str*ngn*s"

我需要一个函数来匹配strstrReplaced 换句话说, *应该被视为任何字符( *应该与任何字符匹配)。

我怎样才能做到这一点?

Strängnäs should be equal to Str*ngn*s

编辑:

也许我不够清楚。 我希望*被视为任何角色。 所以当做[@"Strängnäs" isEqualToString:@"Str*ngn*s"]它应该返回YES

我认为以下正则表达式模式将匹配所有非ASCII文本,考虑到斯堪的纳维亚字母不是ASCII:

[^ -~]

分别处理每一行以避免匹配换行符并将匹配替换为*。

演示: https//regex101.com/r/dI6zN5/1

编辑:

这是基于上述模式的优化模式:

[^\000-~]

演示: https//regex101.com/r/lO0bE9/1

编辑1:根据您的评论,您需要一个UDF(用户定义的函数):

  • 采用斯堪的纳维亚字符串
  • 将所有斯堪的纳维亚字母转换为*
  • 用星号接收字符串
  • 比较两个字符串
  • 如果两个字符串匹配则返回True ,否则返回false。

然后,您可以像CompareString(ScanStr,AsteriskStr)一样使用UDF。

我使用JLILI Amen发布的正则表达式创建了一个代码示例

NSString *string = @"Strängnäs";
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^ -~]" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
NSLog(@"%@", modifiedString);

产量

Str*ngn*s

不确定你到底是什么,但也许这会有所帮助。

匹配任何东西的正则表达式模式是. (点),所以你可以用strReplaced替换*来创建一个模式. 的:

NSString *pattern = [strReplaced stringByReplacingOccurencesOfString:@"*" withString:"."];

现在使用NSRegularExpression您可以从pattern构造一个正则表达式,然后查看str匹配它 - 请参阅所需方法的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM