我如何找到用 NSRegularExpression 写的泰语单词
How do I find words written in Thai with NSRegularExpression
我有一个用泰语写的词--> ความรัก
我如何使用 NSRegularExpression 来匹配这个词?
我尝试使用确切的词,但它不起作用。
它甚至不能在 regex101.com
这样的网站上运行
这是我的代码(swift 版本。但欢迎使用 swift 或 obj 中的答案)。以下代码在我的 playground 文件中。我总是假的,永远不会真。
let labelString = "ความรัก"
let regex = try NSRegularExpression(pattern: "ความรัก", options: [])
let rangeOfFirstMatch = regex.rangeOfFirstMatchInString(labelString, options:.ReportProgress, range:NSRange(location: 0, length: labelString.characters.count))
if (!NSEqualRanges(rangeOfFirstMatch, NSRange(location: NSNotFound, length: 0))) {
print(true)
} else {
print(false)
}
但是,如果我用 "man" 一词替换文本。我总是正确的
漏洞在这里:
NSRange(location: 0, length: labelString.characters.count)
NSRegularExpression
使用基于 UTF-16 的计数和偏移量,因此您需要传递包含基于 UTF-16 的位置和长度的范围。
尝试将包含 NSRange
的行更改为:
let rangeOfFirstMatch = regex.rangeOfFirstMatchInString(labelString,
options:.ReportProgress,
range:NSRange(location: 0, length: labelString.utf16.count))
我更喜欢这种表示法(功能等效):
let rangeOfFirstMatch = regex.rangeOfFirstMatchInString(labelString,
options:.ReportProgress,
range:NSRange(0..<labelString.utf16.count))
(我不确定,但你真的需要 .ReportProgress
?)
我有一个用泰语写的词--> ความรัก
我如何使用 NSRegularExpression 来匹配这个词?
我尝试使用确切的词,但它不起作用。
它甚至不能在 regex101.com
这样的网站上运行这是我的代码(swift 版本。但欢迎使用 swift 或 obj 中的答案)。以下代码在我的 playground 文件中。我总是假的,永远不会真。
let labelString = "ความรัก"
let regex = try NSRegularExpression(pattern: "ความรัก", options: [])
let rangeOfFirstMatch = regex.rangeOfFirstMatchInString(labelString, options:.ReportProgress, range:NSRange(location: 0, length: labelString.characters.count))
if (!NSEqualRanges(rangeOfFirstMatch, NSRange(location: NSNotFound, length: 0))) {
print(true)
} else {
print(false)
}
但是,如果我用 "man" 一词替换文本。我总是正确的
漏洞在这里:
NSRange(location: 0, length: labelString.characters.count)
NSRegularExpression
使用基于 UTF-16 的计数和偏移量,因此您需要传递包含基于 UTF-16 的位置和长度的范围。
尝试将包含 NSRange
的行更改为:
let rangeOfFirstMatch = regex.rangeOfFirstMatchInString(labelString,
options:.ReportProgress,
range:NSRange(location: 0, length: labelString.utf16.count))
我更喜欢这种表示法(功能等效):
let rangeOfFirstMatch = regex.rangeOfFirstMatchInString(labelString,
options:.ReportProgress,
range:NSRange(0..<labelString.utf16.count))
(我不确定,但你真的需要 .ReportProgress
?)