检查字符串是否仅具有特定的重复特殊字符

时间:2019-04-04 05:07:46

标签: java regex

我有一个格式为^%^%^%^%的字符串。我需要检查字符串是否只有^%

的重复模式

例如

1. ^%^%^%^% > Valid

2. ^%^%aa^%^% > Invalid

3. ^%^%^%^%^%^% > Valid

4. ^%^%^^%^% > Invalid

5. %^%^%^%^% > Invalid

如何在Java中做到这一点?

我尝试过:

String text = "^%^%^%^%^%";
if (Pattern.matches(("[\\^\\%]+"), text)==true) {
    System.out.println("Valid");
} else {
    System.out.println("Invalid");
}

但是它给我提供了对情况4和5的有效性。

4 个答案:

答案 0 :(得分:3)

在模式中,您使用的character class仅匹配列出的字符中的1个,然后重复1+次。

您可以使用该^来锚定字符串的开头,并以$结尾来声明字符串的结尾。

然后重复1次以上,匹配\\^%

^(?:\\^%)+$

Regex demo

答案 1 :(得分:2)

尝试此模式^(?:\^%)+$

说明:

^-匹配字符串的开头

(?:...)-非捕获组

\^%-从字面上匹配^%

(?:\^%)+-匹配^%一次或多次

$-匹配字符串的结尾

Demo

答案 2 :(得分:2)

您可以简单地做到:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
     base.OnModelCreating(modelBuilder);
     modelBuilder.ApplyConfiguration(new ArticleConfiguration());
}

if (str.replace("^%", "").isEmpty()) { … } 方法会尽可能多地替换字符串,因此它完全适合您的需求。

它也匹配空字符串,根据规范,该字符串“除此模式外不包含其他任何内容”。在这种情况下,您应始终询问是否也应使用​​空字符串。

答案 3 :(得分:-1)

String[] text = {"^%^%^%^%","^%^%aa^%^%","^%^%^%^%^%^%","^%^%^^%^%","%^%^%^%^%" };
for (String t: text) {
    if(Pattern.matches(("[\\^\\%]+[a-z]*[a-z]*[(\\^\\%)]+"), t)==true) {
            System.out.println("Valid");
    } else {
            System.out.println("Invalid");
    }

}