正则表达式是一种强大的文本处理工具,用于匹配字符串中字符的模式。它由一系列字符组成,这些字符可以是普通字符(如字母a到z)、特殊字符(如星号*或问号?)或二者的组合。正则表达式可以用来搜索、编辑或处理文本。
- 普通字符:字母a到z、数字0到9以及标点符号都是普通字符。它们在正则表达式中表示它们自己。
- 特殊字符:有一些字符具有特殊含义,如
. * ? [ ] ( ) { } ^ $ | \
等。 - 点号(
.
):匹配任意单个字符(除了换行符)。 - 星号(
*
):表示前面的元素可以出现零次或多次。例如,a*
匹配零个或多个'a'。 - 加号(
+
):表示前面的元素至少出现一次。例如,a+
匹配一个或多个'a'。 - 问号(
?
):表示前面的元素可以出现零次或一次。例如,a?
匹配零个或一个'a'。 - 方括号(
[]
):匹配括号内的任意一个字符。例如,[abc]
匹配'a'、'b'或'c'。 - 反斜杠(
\
):用作转义字符,去除特殊字符的特殊含义,或表示特殊序列。 - 圆括号(
()
):定义一个组,可以对匹配的字符串进行操作,如提取。 - 花括号(
{}
):指定前面元素的出现次数。例如,a{3}
匹配三个'a',a{2,}
匹配两个或更多个'a'。 - 竖线(
|
):表示逻辑“或”。例如,cat|dog
匹配“cat”或“dog”。 - 脱字符(
^
):在方括号内使用时,表示非。例如,[^abc]
匹配除了'a'、'b'、'c'之外的任意字符。在圆括号内使用时,表示行的开始。 - 美元符号(
$
):表示字符串的结束。 - 点星(
.
*):是一个危险的组合,因为它可以匹配任意长度的任意字符,包括零个字符。这可能会导致无限循环。 - 正向前瞻(
(?=...)
):正向肯定查找,表示匹配某个字符串之后的内容,但不对这部分字符串进行消费。 - 负向前瞻(
(?!...)
):正向否定查找,表示匹配不是紧跟着某个字符串的内容。
例1:^[A-Za-z]\\d+$
^
:脱字符,表示匹配字符串的开始位置。[A-Za-z]
:字符类,匹配任意单个字母(大小写不限)。\\d
:转义序列,表示匹配任意一个数字。在字符串中,\d
相当于[0-9]
。+
:量词,表示前面的元素至少出现一次。在这里,它与\d
结合,表示至少有一个数字。$
:脱字符,表示匹配字符串的结束位置。
即:以字母开头,后面跟着至少一个数字
例2:^\\d[A-Za-z]*$
^
:脱字符,表示匹配字符串的开始位置。\d
:转义序列,表示匹配任意一个数字(等价于[0-9]
)。[A-Za-z]*
:字符类加上星号(*
)作为量词,表示匹配任意数量的字母(包括零个)。这里的字母包括所有的小写字母(a
到z
)和所有的大写字母(A
到Z
)。$
:脱字符,表示匹配字符串的结束位置。
即:输入的字符串以数字开头,后面可以跟任意数量的字母
例3:^[A-Za-z](?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]*$
^
:脱字符,表示匹配字符串的开始位置。[A-Za-z]
:字符类,匹配任意单个字母(大小写不限)。(?=.*[A-Za-z])
:正向前瞻断言,用于确保字符串中至少包含一个字母。这个断言不会消耗任何字符,它只是向前查看字符串,以确保某个条件为真。(?=.*\d)
:另一个正向前瞻断言,用于确保字符串中至少包含一个数字。[A-Za-z\d]*
:字符类,匹配任意数量的字母或数字(包括零个)。这里的字符集包括了所有的大小写字母和数字。$
:脱字符,表示匹配字符串的结束位置。
即:输入的字符串至少包含一个字母和一个数字,并且以字母开头
代码实现:
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String p1="^[A-Za-z]\\d+$";String p2="^\\d[A-Za-z]*$";String p3="^[A-Za-z](?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]*$";int n=sc.nextInt();sc.nextLine();for(int i=0;i<n;i++){String str=sc.nextLine();if(str.matches(p1)){System.out.println("standard");}else if(str.matches(p2)){System.out.println("special");}else if(str.matches(p3)){System.out.println("mix");}else{System.out.println("invalid");}}}
}
使用str.matches(p1)方法。
近日总结:做好自己,勇往直前,要相信,事与愿违的背后有更好的在等待自己。