\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]
。
在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]
。