小编NEI*_*ONG的帖子

当源包含unicode字符时,Swift正则表达式匹配失败

我正在尝试使用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]*)表达式的部分仍然匹配任何前导字符.

我知道£符号将占用两个字节,但通配符前导匹配应该忽略那些不应该吗?

有人能解释一下这里发生了什么吗?

regex nsregularexpression swift xcode6

4
推荐指数
1
解决办法
1216
查看次数

标签 统计

nsregularexpression ×1

regex ×1

swift ×1

xcode6 ×1