iOS - NSString 正则表达式匹配
iOS - NSString regex match
我有一个字符串,例如:
NSString *str = @"Strängnäs"
然后我用*
替换斯堪的纳维亚字母的方法是:
NSString *strReplaced = @"Str*ngn*s"
我需要一个函数来匹配 str
和 strReplaced
。换句话说, *
应该被视为任何字符( *
应该与任何字符匹配)。
我怎样才能做到这一点?
Strängnäs should be equal to Str*ngn*s
编辑:
可能是我说的不够清楚。我希望 *
被视为任何字符。所以当做 [@"Strängnäs" isEqualToString:@"Str*ngn*s"]
它应该 return YES
考虑到斯堪的纳维亚字母不是 ASCII,我认为以下正则表达式模式将匹配所有非 ASCII 文本:
[^ -~]
分别处理每一行以避免匹配换行符并将匹配替换为 *.
演示:https://regex101.com/r/dI6zN5/1
编辑:
下面是基于上述模式的优化模式:
[^[=10=]0-~]
演示:https://regex101.com/r/lO0bE9/1
编辑 1: 根据您的评论,您需要一个 UDF(用户定义函数):
- 采用斯堪的纳维亚字符串
- 将其所有斯堪的纳维亚字母转换为 *
- 接受带星号的字符串
- 比较两个字符串
- return
True
如果两个字符串匹配,否则为假。
然后您可以像 CompareString(ScanStr,AsteriskStr)
一样使用 UDF。
不确定您到底在寻找什么,但这也许会有所帮助。
匹配任何内容的正则表达式模式是.
(点),因此您可以通过将*
替换为[=11=来从strReplaced
创建一个模式]的:
NSString *pattern = [strReplaced stringByReplacingOccurencesOfString:@"*" withString:"."];
现在使用 NSRegularExpression
,您可以从 pattern
构造一个正则表达式,然后查看 str
是否匹配它 - 请参阅 documentation 了解所需的方法。
我使用 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
我有一个字符串,例如:
NSString *str = @"Strängnäs"
然后我用*
替换斯堪的纳维亚字母的方法是:
NSString *strReplaced = @"Str*ngn*s"
我需要一个函数来匹配 str
和 strReplaced
。换句话说, *
应该被视为任何字符( *
应该与任何字符匹配)。
我怎样才能做到这一点?
Strängnäs should be equal to Str*ngn*s
编辑:
可能是我说的不够清楚。我希望 *
被视为任何字符。所以当做 [@"Strängnäs" isEqualToString:@"Str*ngn*s"]
它应该 return YES
考虑到斯堪的纳维亚字母不是 ASCII,我认为以下正则表达式模式将匹配所有非 ASCII 文本:
[^ -~]
分别处理每一行以避免匹配换行符并将匹配替换为 *.
演示:https://regex101.com/r/dI6zN5/1
编辑:
下面是基于上述模式的优化模式:
[^[=10=]0-~]
演示:https://regex101.com/r/lO0bE9/1
编辑 1: 根据您的评论,您需要一个 UDF(用户定义函数):
- 采用斯堪的纳维亚字符串
- 将其所有斯堪的纳维亚字母转换为 *
- 接受带星号的字符串
- 比较两个字符串
- return
True
如果两个字符串匹配,否则为假。
然后您可以像 CompareString(ScanStr,AsteriskStr)
一样使用 UDF。
不确定您到底在寻找什么,但这也许会有所帮助。
匹配任何内容的正则表达式模式是.
(点),因此您可以通过将*
替换为[=11=来从strReplaced
创建一个模式]的:
NSString *pattern = [strReplaced stringByReplacingOccurencesOfString:@"*" withString:"."];
现在使用 NSRegularExpression
,您可以从 pattern
构造一个正则表达式,然后查看 str
是否匹配它 - 请参阅 documentation 了解所需的方法。
我使用 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