我如何制作全部或全部Java正则表达式?

时间:2011-04-07 00:49:25

标签: java regex

我正在努力制作一个正则表达式,因为给定的单词必须与正则表达式完全匹配 - 如果没有,则找不到匹配。

例如,如果我的正则表达式是:

^[a-zA-Z][a-zA-Z|0-9|_]*

然后我想要匹配:

cat9
cat9_
bob_____

但我不想匹配:

cat7-
cat******
rango78&&

我希望我的正则表达式尽可能严格,采用全有或全无的方法。我怎么能这样做?

编辑:为了使我的正则表达式绝对清晰,模式必须以字母开头,后跟任意数量的数字,字母或下划线。不允许使用其他字符。以下是我用来测试我的正则表达式的相关程序。

Pattern p = Pattern.compile("^[a-zA-Z][a-zA-Z|0-9|_]*");

    Scanner in = new Scanner(System.in);
    String result = "";


    while(!result.equals("-1")){

        result = in.nextLine();

        Matcher m = p.matcher(result);

        if(m.find())
        {
            System.out.println(result);
        }
    }

3 个答案:

答案 0 :(得分:5)

我认为如果您使用String.matches(regex),那么您将获得所需的效果。文档说明matches()仅在整个字符串与模式匹配时才会返回true。

答案 1 :(得分:2)

正则表达式与第二个示例不匹配。它已经很严格,因为*和&不在允许的字符集中。

它可能匹配前缀,但您可以通过在正则表达式的末尾添加“$”来避免这种情况,该正则表达式明确匹配输入的结尾。所以试试,

^[a-zA-Z][a-zA-Z|0-9|_]*$

这将确保匹配对整个输入字符串,而不仅仅是前缀。

答案 2 :(得分:2)

请注意,\w[A-Za-z0-9_]相同。你需要锚定到字​​符串的末尾,如下所示:

Pattern p = Pattern.compile("^[a-zA-Z]\\w*$")