【发布时间】:2021-04-13 16:04:00
【问题描述】:
我认为拉丁字符是我的问题的意思,但我不完全确定正确的分类是什么。我正在尝试使用正则表达式模式来测试字符串是否包含非拉丁字符。我期待以下结果
"abcDE 123"; // Yes, this should match
"!@#$%^&*"; // Yes, this should match
"aaàààäää"; // Yes, this should match
"ベビードラ"; // No, this shouldn't match
"????????????????"; // No, this shouldn't match
我的理解是,内置的{IsLatin} 预设只是检测是否有任何字符是拉丁语。我想检测是否有任何字符不是拉丁语。
Pattern LatinPattern = Pattern.compile("\\p{IsLatin}");
Matcher matcher = LatinPattern.matcher(str);
if (!matcher.find()) {
System.out.println("is NON latin");
return;
}
System.out.println("is latin");
【问题讨论】:
-
我认为您实际上想检查字符串是否为 ASCII,
Pattern LatinPattern = Pattern.compile("\\p{ASCII}");。见ideone.com/FeTIiT -
是的,也许 ASCII 就是我的意思。您发布的模式测试是否有任何字符是 ASCII。我有兴趣检测是否有任何字符不是 ASCII。
-
这个问题自相矛盾。它说
"abcDE 123"应该匹配,但随后抱怨\p{IsLatin}匹配并说您“想要检测是否有任何字符不是拉丁语”。那么它是哪一个?当字符串包含非拉丁字符时,您希望正则表达式匹配还是不匹配?请编辑问题并阐明您期望从正则表达式中得到什么结果。 -
仅供参考:
\p{IsLatin}匹配拉丁字符。反向测试\P{IsLatin},使用大写的P,匹配\p{IsLatin}不匹配的任何内容,即所有非拉丁字符。\P{IsLatin}与[^\p{IsLatin}]相同。 -
如果所有字符都是拉丁字符,我希望正则表达式匹配,如果任何字符都是非拉丁字符,则不匹配。这可能吗?