ios - 英语以外的语言的正则表达式错误
问题描述
正则表达式函数在英语以外的语言上给出错误。即使英文句子与模式不匹配,功能也有效。在其他语言中,它会引发错误,而不是忽略模式并像输入时一样输出字符串。
如何解决?或者,问题出在哪里?
decompose("10 minutes have fun") // <- ok, string with pattern match
decompose("gggggg") // <- ok
decompose("salut chéri") // <- error
decompose("عرب") // <- error
decompose("日本語") // <- error
func decompose(_ inputText: String) -> (time: String, task: String) {
let pattern = #"(\d+)\s*minute(s)?|(\d+)\s*hour"#
let regexOptions: NSRegularExpression.Options = [.caseInsensitive]
let matchingOptions: NSRegularExpression.MatchingOptions = [.reportCompletion]
let range = NSRange(location: 0, length: inputText.utf8.count)
var time = ""
var taskName = inputText
let regex = try? NSRegularExpression(pattern: pattern, options: regexOptions)
if let matchIndex = regex?.firstMatch(in: inputText, options: matchingOptions, range: range) {
let startIndex = inputText.index(inputText.startIndex, offsetBy: matchIndex.range.lowerBound)
print(startIndex)
let endIndex = inputText.index(inputText.startIndex, offsetBy: matchIndex.range.upperBound)
print(endIndex)
time = String(inputText[startIndex..<endIndex])
time = time.trimmingCharacters(in: .whitespaces)
taskName.removeSubrange(startIndex..<endIndex)
} else {
print("\n No match for --- \(inputText) ---. \n")
}
return (time, taskName)
}
var strWithMatch = "10 minutes have fun"
var strEn = "gggggg"
var strJa = "日本語"
var strFr = "salut chéri"
var strAr = "عرب"
解决方案
推荐阅读
- android - 当我在 sqllite db 文件中进行文本更改时出现异常
- java - 如何使用 Android 动画播放“滴答滴答”声音(可能使用“Android MediaPlayer / SoundPool”)?
- sed - 如何使用 sed 命令打印行?
- python - 在 Pandas 中重命名多个列值
- java - 嵌套for循环,不拾取数组中的第一个实例
- c - 自系统初始化后定期调用函数
- mysql - 如何将mysql写入磁盘
- symfony - Symfony 表单 - 内部带有复选框的集合类型
- ruby-on-rails - Ransack 分拣协会
- javascript - 包含脚本、延迟或执行 DOMContentLoaded 事件的最佳实践?