问题
写出与email匹配的正则表达式,并测试该正则表达式的正确性。
方案
首先,分析email的正则表达式,email的正则表达式如下:
[a-zA-Z0-9_\.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,4}
以上正则表达式可以分成三部分,各个部分如下:
1)[a-zA-Z0-9_\.-]+@
表示a~z、A~Z、0~9、下划线、点以及减号可以出现至少1次也可以多次,然后出现@符号。
2)([a-zA-Z0-9-]+\.)+
这段中的"( )"表示分组,这段正则表示这一组至少出现一次,也可以出现多次。括号中的内容表示,a~z、A~Z、0~9及减号可以至少出现1次也可以出现多次,然后出现"."字符。
3)[a-zA-Z0-9]{2,4}
表示a~z、A~Z、0~9可以出现大于等于2次,小于等于4次。
其次,使用String类的matches方法,可以测试一个字符串是否和一个正则表达式匹配,matches方法的声明如下:
public boolean matches(String regex)
以上方法表示当字符串和正则表达式regex匹配时返回true,否则,返回false。
步骤
实现此案例需要按照如下步骤进行。
步骤一:添加测试方法
首先,在名为JavaSE的工程下的src下新建名为day02的包,然后,在该包下新建名为TestRegEx的类,然后在该类中添加测试方法email,代码如下所示:
package day02;
import org.junit.Test;
public class TestRegEx{
/**
*
*测试email是否合法
*/
@Test
public void email(){
}
}
步骤二:测试email正则表达式的正确性
首先,定义字符变量emailRegEx,该变量赋值为正则表达式:
"^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$"
其中,^表示匹配输入的开始位置,$表示匹配输入的结束位置。此外需要注意的是,在正则表达式中"\."表示的是"."字符,但是,在Java代码中需要对"\"字符做转义,即"\\"表示一个"\"。因此在定义Java的正则表达式变量emailRegEx时,使用"\\."来表示一个"."字符。
然后,测试email([email protected])是否和正则表达式emailRegEx匹配,代码如下所示:
package day02;
import org.junit.Test;
public class TestRegEx{
/**
*
*测试email是否合法
*/
@Test
public void email(){
String emailRegEx="^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$";
String email="[email protected]";
System.out.println(email.matches(emailRegEx));
}
}
步骤三:运行
运行方法email,控制台输出结果如下:
true
从输出结果可以看出email([email protected])和正则表达式是匹配的。