正则表达式, ^[a-zA-Z]+$ 与 [a-zA-Z]* 的区别

4
我非常新于编程,但被告知现在应该避免使用正则表达式,但我发现它非常有帮助。
当编写一个程序来检查字符串是否仅包含字母时,我在stackoverlow上发现^[a-zA-Z]+$[a-zA-Z]*都产生相同的结果。我理解[a-zA-Z]的工作原理,并且我也了解[A-z]与这两者不同,但我不理解+ $与^ [] *或为什么它们会产生相同的结果,我很难找到解释。
以下是我使用它的示例:
String student = input.next();
while (!student.matches("[a-zA-Z]*")) {
   System.out.print("Invalid input. Enter name: ");
   student = input.next();
}

这是我在这里的第一个问题,如果这种问题不受欢迎,请原谅。

这个问题涉及到IT技术。

1
^ 表示字符串的开头,$ 表示字符串的结尾。它们被称为“锚点”。+ 表示“一个或多个”,而 * 表示“零个或多个”(是的,* 可以匹配零个字符)。 - gen_Eric
我不会将语言的_NOT_运算符与这个正则表达式混合使用。只需使用[^a-zA-Z]进行搜索即可。 - user557597
2个回答

4

正如您所知,

[a-zA-Z]

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

[a-zA-Z]*

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

^[a-zA-Z]+$

匹配以一个或多个大写或小写字母开头,并以相同大小写字母结尾的字符串。这意味着你的字符串仅包含大写或小写字母。

^和$在处理数据流时发挥更大的作用,使用正则表达式筛选出所需内容而忽略不需要的内容。最后一个模式可用于查找仅由大写和小写字母组成的数据流。


3

* 表示零个或多个, + 表示一个或多个.

然而, 还有一个更大的区别就是 ^$. 在第一个例子中, 它表明字符串必须完全由 [a-zA-Z] 组成, 所以字符串 123abc123无效的.

在第二个例子中, 如果省略掉 ^$, 那么字符串 123abc123有效的.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接