首页 > 解决方案 > 英语以外的语言的正则表达式错误

问题描述

正则表达式函数在英语以外的语言上给出错误。即使英文句子与模式不匹配,功能也有效。在其他语言中,它会引发错误,而不是忽略模式并像输入时一样输出字符串。

如何解决?或者,问题出在哪里?

decompose("10 minutes have fun") // <- ok, string with pattern match
decompose("gggggg") // <- ok
decompose("salut chéri") // <- error
decompose("عرب") // <- error
decompose("日本語&quot;) // <- 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 = "日本語&quot;
var strFr = "salut chéri"
var strAr = "عرب"


标签: iosswiftregex

解决方案


推荐阅读