我正在尝试编写正则表达式。要求是:表达式应该用cyrilic字母表写,它也可以包含任何数字和任何符号,如!@#$%^& *()等等,只排除拉丁字母。我的问题是我的表达不包括所有这些特殊符号!@#$ ...我的表达式是^ [а-яА-ЯёЁa0-9] + $。我做测试:
@Test
public void matchAnEmptyStringOrASpecificOtherPattern() {
String input = "";
// ^[а-яА-ЯёЁa0-9]+$
assertTrue( Pattern.compile("^[а-яА-ЯёЁa0-9]+$").matcher(input).find()
);
如何在我的模式中包含这些符号。
答案 0 :(得分:1)
您不能使用带有西里尔字符的范围(例如[а-я]
)。
如果您只想匹配!@#$
集中的西里尔字符,数字和字符,您可能想要的是:
assertTrue(
Pattern.compile(
// | cyrillic and supplementary blocks
// | | the rest
"(\\p{InCyrillic}|\\p{InCyrillic_Supplementary}|[!@#$0-9])+"
)
.matcher(input)
// match all input (instead of "find" with "^" and "$")
.matches()
);
示例强>
Pattern p = Pattern.compile(
"(\\p{InCyrillic}|\\p{InCyrillic_Supplementary}|[!@#$0-9])+"
);
System.out.println(p.matcher("я!Я@#$1").matches()); // true
System.out.println(p.matcher("я!Я@#$abc").matches()); // false, has western letters