以下列出3个正则表达式的范例程序,通过这3个范例程序,可以大致了解和学习到正则表达式的使用。
1. 手机号验证
在未学习正则表达式的时候,验证手机号可能得通过条件判断语句来完成。代码如下:
class="java">package com.lxd.regex;
import org.junit.Test;
/**
* 合法的手机号要求:
* a.长度11位
* b.第1位必须1
* c.第2位只能是3 或 5 或 8
* d.必须全是数字
*
* @param args
*/
public class MobileDemo1 {
@Test
public static void main(String args) {
String s = "18007311313";
if (s.length() != 11) {
System.out.println("长度必须是11位");
} else {
if (!s.startsWith("1")) {
System.out.println("必须是1开头");
} else {
if (s.charAt(1) != '3' && s.charAt(1) != '5'
&& s.charAt(1) != '8') {
System.out.println("第2位只能是358");
} else {
for (int i = 2; i < s.length(); i++) {
char ch = s.charAt(i);
if (!Character.isDigit(ch)) {
System.out.println("必须全是数字");
return;
}
}
System.out.println("合法的手机号");
}
}
}
}
}
可以看出,上面的条件判断比较复杂,代码也很长,不太好。使用正则表达式,可大大简化验证过程。代码如下:
package com.lxd.regex;
public class MobileDemo2 {
public static void main(String[] args) {
String s = "18007311313";
// 指定匹配模式
String regex = "1[358]\\d{9}";
// 或者:
// String regex = "1[358][0-9]{9}";
// 验证是否匹配 (若为true,则匹配;若为false,则不匹配)
System.out.println(s.matches(regex));
}
}
2. 登录时的一些验证
package com.lxd.regex;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
/**
*
* @author Xiangdong
*
*/
public class LoginDemo {
/**
* 验证用户名: 1.长度 6-20 {6,20} 2.不能有特殊字符 [a-zA-Z0-9] 3.不能以 数字 开头 [^0-9]
*/
@Test
public void checkUname() {
String s = "flycat2_Z";
String regex = "[a-zA-Z]\\w{5,19}";
if (s.matches(regex)) {
System.out.println("合法的用户名");
} else {
System.out.println("@_@ 非法的用户名");
}
}
@Test
public void checkUnameFromStream() throws Exception {
System.out.println("请输入用户名:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
String regex = "[a-zA-Z]\\w{5,19}";
if (s.matches(regex)) {
System.out.println("合法的用户名");
} else {
System.out.println("@_@ 非法的用户名");
}
}
/**
* 验证电子邮箱(Email): admin@gmail.com
*/
@Test
public void checkEmail() {
String s = "tom.scott@gmail.com";
String regex = "\\b(^['_A-Za-z0-9-]+(\\.['_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\\.[A-Za-z0-9-]+)*((\\.[A-Za-z0-9]{2,})|(\\.[A-Za-z0-9]{2,}\\.[A-Za-z0-9]{2,}))$)\\b";
if (s.matches(regex)) {
System.out.println("合法的Email");
} else {
System.out.println("@_@ 非法的Email");
}
}
/**
* 匹配功能: 1.验证QQ号是否合法 a. 5-15 b. 首位不能是0 c. 只能是数字
*
*/
@Test
public void qq() {
String s = "12255555555";
String regex = "[1-9]\\d{4,14}";
System.out.println(s.matches(regex));
}
}
3. 一些简单的小范例
package com.lxd.regex;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
public class RegexDemo {
@Test
public void demo1() {
String s = "9";
String regex = "\\d";
System.out.println(s.matches(regex));
}
@Test
public void demo2() {
String s = "a1_Z";
String regex = "\\w{4}";
System.out.println(s.matches(regex));
}
@Test
public void demo3() {
String s = "javaw_4";
String regex = "^java\\w{3}";
System.out.println(s.matches(regex));
}
@Test
public void demo4() {
String s = "1ebjava";
String regex = "[a-zA-Z0-9]{3}java$";
System.out.println(s.matches(regex));
}
@Test
public void demo5() {
String s = "javaz\t";
String regex = "java..";
System.out.println(s.matches(regex));
}
@Test
public void demo6() {
String s = "?";
String regex = "[^0-9a-z]";
System.out.println(s.matches(regex));
}
@Test
public void demo7() {
String s = "a8a";
String regex = "[0-9a-z]*";
System.out.println(s.matches(regex));
}
@Test
public void demo8() {
String s = "a8A";
// * 出现 0次 或 多次
String regex = ".*";
System.out.println(s.matches(regex));
}
@Test
public void demo9() {
String s = "a8a";
// + 出现 1次 或 多次
String regex = "[0-9a-z]+";
System.out.println(s.matches(regex));
}
@Test
public void demo10() {
String s = "a";
// ? 出现 0次 或 1次
String regex = "[0-9a-z]?";
System.out.println(s.matches(regex));
}
@Test
public void demo11() {
String s = "a1z";
String regex = "[0-9a-z]{3}";
System.out.println(s.matches(regex));
}
@Test
public void demo12() {
String s = "a1zzy";
String regex = "[0-9a-z]{3,5}";
System.out.println(s.matches(regex));
}
@Test
public void demo13() {
String s = "boy";
String regex = "hi|girl|boy";
System.out.println(s.matches(regex));
}
/**
* 去掉连续叠词(重复字母)
*
*/
@Test
public void demo14() {
String str = "ababbbbbbcdeefghiiijkllmmmn";
String[] ary = str.split("(.)\\1+");
System.out.println(ary.length);
System.out.println(Arrays.toString(ary));
}
/**
* 将所有叠词只保留一个
*
*/
@Test
public void demo15() {
String str = "abbbbcddddeffffffftreewwq";
String regex = "(.)\\1+";
String newValue = "$1";
str = str.replaceAll(regex, newValue);
System.out.println(str);
}
@Test
public void demo16() {
String str = "dsa sss fdsa opq fdsafdsaf www fdas";
String regex = "\\b[a-zA-z]{3}\\b";
// 1.得到正则表达式的编译对象Pattern
Pattern p = Pattern.compile(regex);
// 2.得到匹配器(引擎)
Matcher matcher = p.matcher(str);
// 3.matcher.matches()
while (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.start());
System.out.println(matcher.end());
}
}
}
更多的内容,请查看java.util.regex包中的Pattern类。