\d 和 \w 元字符是否包含国际字符?

Do the \d and \w metacharacters include international characters?

在Java中出现\d=[0-9]\w=[A-Za-z_],iOS和ICU也是这样吗?

我不想包含国际字符,但文档仅包含 Unicode 引用。

在Java中,\w默认匹配[a-zA-Z0-9_],一旦使用(?U)Pattern.UNICODE_CHARACTER_CLASS标志),它只匹配Unicode字母,见this demo:

String s = "abc śął"
System.out.println(s.replaceAll("(?U)\w+", "")); // " "
System.out.println(s.replaceAll("\w+", ""));     // " śął"

在Objective-C中,\w将匹配Unicode字母:

NSString * s = @"abcśął";
NSString * rx = @"\w+";
NSPredicate * rxTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", rx];
if ([rxTest evaluateWithObject:s]) {
 NSLog (@"yes");
}
else
{
 NSLog (@"no");
}

This will print yes. Also, see the official reference:

\w    Match a word character. Word characters are [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}].

\p{} 语法匹配属于某个类别的 Unicode 符号。因此,\w 基本上匹配 Unicode 字母(\p{Ll} - 小写字母,\p{Lu} - 大写字母,\p{Lt} - 标题字母,\p{Lo} - 其他字母),并且数字(\p{Nd})。事实上,iOS中的\w也会匹配_(奇怪的是它没有出现在文档中)。

经验法则:

  • 如果您只需要匹配 ASCII 字母和下划线,请使用明确的 [a-zA-Z_].
  • 如果您想确保只匹配 ASCII 数字,请使用明确的 [0-9]