我正在尝试创建用于字符串比较的正则表达式。
正则表达式为:.*\bword.*
但是,我想忽略特殊字符,使用和不使用特殊字符都可以进行比较。
例如:
O'Reilly应该与O'Reilly和oreilly匹配
是否可以使用正则表达式?
P.S。
这将在带有NSPredicate的iOS中使用。 当前,谓词如下:
NSString *regexString = [NSString stringWithFormat:@".*\b%@.*", word];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K matches[cd] %@", keypath, regexString];
由于NSPredicate不允许我执行任何操作,例如将键路径的值替换为没有特殊字符的值,因此我需要通过正则表达式来完成。
答案 0 :(得分:1)
您可能会考虑在进行比赛之前对字符串进行预处理。如果您有一个可接受的字符列表,在您的示例中只是a-z和A-Z,则可以使用音译运算符tr///
删除所有其他字符,并使用lc
来小写该字符串。 tr
上的标志是c
,表示匹配,即匹配未列出的所有内容,d
删除没有替换项的所有匹配项,因为替换项为空,表示所有内容匹配。
$string =~ tr/a-zA-Z//cd;
$string = lc $string;
如果您使用的字符不在ASCII范围内,则需要更聪明。
$string =~ s/\P{L}+//g;
$string = fc $string;
首先,我们使用正则表达式删除所有不在常规类别字母中的Unicode字符。然后,我们使用fc
函数折叠字符串的大小写,这与Perl用于区分大小写的正则表达式匹配的函数相同。请注意,您可能要先对字符串进行规范化。