regex - 在 Swift 中匹配字符串,其中字符不同但包含相同的 Unicode 标量

标签 regex string swift unicode

我想用 Swift 中的正则表达式匹配一个字符串。我正在按照描述的方法 here .

通常这会像这样工作(在 Xcode playground 中评估):

var str1 = "hello"
var str2 = "bye"
var regex1 = "[abc]"
str1.rangeOfString(regex1, options:.RegularExpressionSearch) != nil // false - there is no match
str2.rangeOfString(regex1, options:.RegularExpressionSearch) != nil // true - there is a match

到目前为止一切顺利。现在让我们取两个字符串,其中包含由多个 Unicode 标量组成的字符(如在 Xcode Playground 中评估的那样):

var str3 = "✔️"
var regex2 = "[✖️]"
"✔️" == "✖️" // false - the strings are not equal
str3.rangeOfString(regex2, options:.RegularExpressionSearch) != nil // true - there is a match!

当我尝试在 "✔️" 中查找 "✖️" 时,我不希望有匹配项,但是因为 "\u{2714}"+ "\u{FE0F}"== "✔️""\u{2716}"+"\u{FE0F}"== "✖️",然后是 "\u{FE0F}" 在两者中都找到并且给出了匹配。

你会如何进行比赛?

最佳答案

深入研究 link由@stribizhev 提供,我想出了这个(在 Xcode playground 中评估):

var str1 = "hello"
var str2 = "bye"
var str3 = "✔️"
var regex1 = "[abc]"
var regex2 = "[✖️]"

let matcher1 = try! NSRegularExpression(pattern: regex1, options: NSRegularExpressionOptions.CaseInsensitive)
let matcher2 = try! NSRegularExpression(pattern: regex2, options: NSRegularExpressionOptions.CaseInsensitive)

matcher1.numberOfMatchesInString(str1, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, str1.characters.count)) != 0 // false - does not match
matcher1.numberOfMatchesInString(str2, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, str2.characters.count)) != 0 // true - matches
matcher2.numberOfMatchesInString(str3, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, str3.characters.count)) != 0 // false - does not match

这适用于 XCode 7.1 和 Swift 2.1

关于regex - 在 Swift 中匹配字符串,其中字符不同但包含相同的 Unicode 标量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302429/

相关文章:

java - java中如何根据子字符串的长度将字符串转换为子字符串数组?

SQL查询将表分组为表的表?

c# - 句子的英语到 PigLatin 转换

swift - Cocoapod "pod spec lint"CompileSwift 返回不成功的退出代码

swift - 我的设备正忙 : Copying Symbol Files in Xcode 6. 4

c# - c#中特殊字符的正则表达式

regex - Perl正则表达式问题

c - 为什么我得不到 "Segmentation Fault"?

swift - 如何让 UIScrollView 滚动其中的所有内容

asp.net-mvc - 为什么使用此正则表达式时 ASP.NET-MVC 路由的 UrlParameter.Optional 被忽略?