我正在努力制作一个正则表达式,因为给定的单词必须与正则表达式完全匹配 - 如果没有,则找不到匹配。
例如,如果我的正则表达式是:
^[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);
}
}
答案 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*$")