常规表达以匹配字符和数字,但不匹配Java中的特定字符串

时间:2015-03-22 05:26:22

标签: java regex pattern-matching

晚上好人,

我对Java中的正则表达式有疑问。

我有一个字符串s,它应该以小写或大写字母开头,后跟无论有多少个字符或数字。它不应该匹配关键字(全部为小写)“if”,“else”, “同时”, “真”, “假”

所以在Java中它会是这样的

    if(s.matches("^[a-zA-Z][a-zA-Z0-9]*") && !s.equals("if") 
                    && !s.equals("else") && !s.equals("while") &&  !s.equals("true") 
                    && !s.equals("false")){
              System.out.println("is ID");
}

        else {
                  System.out.println("not ID");
    }

所以输出到不同的s看起来像

 //s="if"
not ID

 //s="ifif"
is ID

//s="while220"
is ID

//s="90"
not ID

我的问题是: 我可以使用一个正则表达式来达到if语句中的所有条件吗?

由于

1 个答案:

答案 0 :(得分:0)

你可以通过negative lookahead assertion在一个正则表达式中完成所有操作。如果输入字符串为ifelsewhiletruefalse,则不匹配。下面的模式将匹配实际上满足[a-zA-Z][a-zA-Z0-9]*的这些关键字以外的字符串。

if(s.matches("^(?!(?:if|else|while|true|false)$)[a-zA-Z][a-zA-Z0-9]*"))
{
System.out.println("is ID");
}

    else {
              System.out.println("not ID");
}