正则表达式,^ [a-zA-Z] + $ vs [a-zA-Z]之间的差异*

时间:2014-11-03 20:22:00

标签: regex

我是编程新手,我被告知现在要避免使用正则表达式,但我发现它非常有用。

在编写程序以检查字符串是否只包含字母时,我在stackoverlow上发现^[a-zA-Z]+$[a-zA-Z]*都会产生相同的结果。我理解[a-zA-Z]是如何工作的,我理解[A-z]如何与这两者不同,但我不理解+ $ vs ^ [] *或者为什么它们产生相同的结果而我是找不到任何解释的东西。

以下是我在其中使用的示例:

String student = input.next();
while (!student.matches("[a-zA-Z]*")) {
   System.out.print("Invalid input. Enter name: ");
   student = input.next();
}

这是我在这里的第一个问题,如果这种问题不受欢迎,那就很抱歉。

2 个答案:

答案 0 :(得分:2)

*为零或更多,+为一个或多个。

但是,^$存在较大差异。在第一个例子中,它说它必须只包含[a-zA-Z],其中字符串123abc123 有效。

在第二个示例中,省略^$123abc123 有效。

答案 1 :(得分:2)

如你所知,

[a-zA-Z]

匹配单个大写或小写字母。

[a-zA-Z]*

连续匹配零个或多个大写或小写字母。

^[a-zA-Z]+$

将一个字符串与一个或多个大写或小写字母匹配,并以它结尾。意思是,你的字符串中唯一的东西是大写或小写字母。

^和$在处理数据流时扮演更多角色,使用正则表达式筛选出你想要的东西,同时忽略你没有的东西。最后一个模式可用于查找仅包含大写和小写字母的流。