java的正则表达式

时间:2015-12-02 14:30:26

标签: java expression

我正在尝试编写正则表达式。要求是:表达式应该用cyrilic字母表写,它也可以包含任何数字和任何符号,如!@#$%^& *()等等,只排除拉丁字母。我的问题是我的表达不包括所有这些特殊符号!@#$ ...我的表达式是^ [а-яА-ЯёЁa0-9] + $。我做测试:

@Test
public void matchAnEmptyStringOrASpecificOtherPattern() {

    String input = "";
    // ^[а-яА-ЯёЁa0-9]+$
    assertTrue( Pattern.compile("^[а-яА-ЯёЁa0-9]+$").matcher(input).find()    

);

如何在我的模式中包含这些符号。

1 个答案:

答案 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