通过String regex (定义标准表达式)
通过String 类型的 . matches方法经行比较
元字符:
元字符 | 在正则表达式的写法 | 意义 |
. | . | 任何一个字符 |
\d | \\d | 0到9的任何一个数 |
\D | \\D | 任何一个非数字字符 |
\s | \\s | 空格类字符 \'t' '\n' '\x0B' '\f' '\r' |
\S | \\S | 非空格类字符 |
\w | \\w | 可用于标识符的字符 不包含美元符 |
\\W | \\W | 不能用于标识符的字符 |
\p{Lower} | \\p{Lower} | 小写字母[a - z] |
\p{Upper} | \\p{Upper} | 大写字母[A - Z] |
\p[ASCLL] | \\p[ASCLL] | ASCLL字符 |
\p[Alpha] | \\p[Alpha] | 字母 |
\p{digit} | \\p{digit} | 数字字符[0 - 9] 与\\d 有在String中有区别 即\\p{digit}在String中无法使用而\\d可以 |
\p{Alnum} | \p{Alnum} | 字母或数字 |
\p{Punct} | \\p{Punct} | 表点字符 |
正则表达式中的 [ ]
1 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
2 []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
3 -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
4. ^在中括号里面和外面含义不同,如在外时,就表示开头,如^7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。
限定符
1 X? 表示X出现0次或1次。
2 X+ 表示X出现1次或多次。
3 X* 表示X出现0次、1次或多次。
4 X{n} 表示X出现n次。
5 X{n,m} 表示X出现n~m次。
6 X{n,} 表示X出现n次或n次以上。
7 XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。
8 X|Y表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f。
9 (X)子表达式,将X看做是一个整体。
例:
测试说明
文件名(fileName
)和邮箱(email
)会作为函数的参数传入。
输入
HelloWorld.java
laurenyang@edu.com
输出: Java文件名正确
邮箱名正确
import java.util.*;
publi class HelloWorld {
public static void judge(String fileName,String email){
String javaName = "((\\p{Alnum}{1,}\\.){1,}java)"; //java 文件名
String emailName = "(\\p{Alnum}{1,}\\@.\\p{Alnum}{1,}\\.\\p{Alnum}{1,})"; //邮箱名
boolean match1 = fileName.matches(javaName);
boolean match2 = email.matches(emailName);
if(match1){
System.out.println("Java文件名正确");
}
else{
System.out.println("Java文件名无效");
}
if(match2){
System.out.println("邮箱名正确");
}
else{
System.out.println("邮箱名无效");
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String javaName = scanner.nextLine();
String emailName = scanner.nextLine();
judge(javaName , emailName);
}
}