我正在尝试使用NSRegularExpression进行简单的正则表达式匹配,但是当源包含多字节字符时,我遇到了一些匹配字符串的问题:
let string = "D 9"
// The following matches (any characters)(SPACE)(numbers)(any characters)
let pattern = "([\\s\\S]*) ([0-9]*)(.*)"
let slen : Int = string.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
var error: NSError? = nil
var regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.DotMatchesLineSeparators, error: &error)
var result = regex?.stringByReplacingMatchesInString(string, options: nil, range: NSRange(location:0,
length:slen), withTemplate: "First \"$1\" Second: \"$2\"")
Run Code Online (Sandbox Code Playgroud)
上面的代码按预期返回"D"和"9"
如果我现在更改第一行以包含英国"英镑"货币符号,如下所示:
let string = "£ 9"
Run Code Online (Sandbox Code Playgroud)
然后匹配不起作用,即使([\\s\\S]*)表达式的部分仍然匹配任何前导字符.
我知道£符号将占用两个字节,但通配符前导匹配应该忽略那些不应该吗?
有人能解释一下这里发生了什么吗?