正则表达式2:一些范例_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 正则表达式2:一些范例

正则表达式2:一些范例

 2015/4/13 12:35:50  XiangdongLee  程序员俱乐部  我要评论(0)
  • 摘要:以下列出3个正则表达式的范例程序,通过这3个范例程序,可以大致了解和学习到正则表达式的使用。1.手机号验证在未学习正则表达式的时候,验证手机号可能得通过条件判断语句来完成。代码如下:packagecom.lxd.regex;importorg.junit.Test;/***合法的手机号要求:*a.长度11位*b.第1位必须1*c.第2位只能是3或5或8*d.必须全是数字**@paramargs*/publicclassMobileDemo1{@Testpublicstaticvoidmain
  • 标签:正则表达式 表达式 正则
        以下列出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类。


发表评论
用户名: 匿名