`
IT_nice
  • 浏览: 7778 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_正则表达式

阅读更多

------- android培训java培训、期待与您交流! ----------

 

 

package cn.itcast.c_regex;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailTest {
	public static void main(String[] args) throws IOException {

		// 1.获取Pattern 对象.->静态compile 传入正则表达式的字符串形式. 返回一个对象形式的正则
		Pattern p = Pattern.compile("\\w+@\\w+(\\.\\w{2,3})+");

		// 3. 创建字符流缓冲流,读取页面,获取页面中的信息.
		BufferedReader br = new BufferedReader(new InputStreamReader(
				new FileInputStream("email.html"), "utf-8"));
		String line;

		// 5. 创建集合存储邮箱.
		ArrayList<String> list = new ArrayList<String>();
		// 4. 循环读取,一次读取一行.
		while ((line = br.readLine()) != null) {
			// 5. 将读取的一行字符串,传入到Pattern 对象matcher 方法中-> 获取一个Mather 对象.
			Matcher m = p.matcher(line);
			// 6. Mather 对象的find 查找是否存在符合规则的内容.
			while (m.find()) { // hasNext
				// 7. 获取符合规则的内容.
				list.add(m.group()); // next
			}
		}

		for (String email : list) {
			System.out.println("发邮件给:" + email);
		}
	}
}
 
package cn.itcast.f_regex;

public class Demo1 {
	public static void main(String[] args) {
		// 1. 正则表达式.
		// System.out.println("bca".matches("abc"));

		// test1();
		// testQq();

		// test2();

		// testPhone();

		// test3();
		// test4();

		// qq 号.
		System.out.println("10000".matches("[1-9]\\d{4,11}"));
		// 手机号
		System.out.println("13838384386".matches("[1][34578]\\d{9}"));
		// 用户名
		System.out.println("jack123".matches("[a-zA-Z_]\\w{5,15}"));
		// 密码
		System.out.println("123456".matches("\\d{6}"));
		// 座机 010 020-38325125 0755
		System.out.println("020-38325125"
				.matches("[0][1-9]\\d\\d?-[1-9]\\d{6,7}"));

		// 邮箱 jack@itcast.cn 12345@qq.com rose@163.com lucy@sina.vip.com
		// xxx@sina.com.cn

		String emailRegex = "\\w+@\\w+(\\.\\w{2,3})+";

		System.out.println("jack@itcast.cn".matches(emailRegex));
		System.out.println("12345@qq.com".matches(emailRegex));
		System.out.println("rose@163.com".matches(emailRegex));
		System.out.println("lucy@sina.vip.com".matches(emailRegex));
		System.out.println("xxx@sina.com.cn".matches(emailRegex));
	}

	/**
	 * <pre>
	 * . 任何字符(与行结束符可能匹配也可能不匹配) 
	 * \d 数字:[0-9] 
	 * \D 非数字: [^0-9] 
	 * \s 空白字符:[ \t\n\x0B\f\r] 
	 * \S 非空白字符:[^\s] 
	 * \w 单词字符:[a-zA-Z_0-9] 
	 * \W 非单词字符:[^\w]
	 * 
	 * 
	 * </pre>
	 */
	public static void test4() {
		// . 表示任意符号.
		System.out.println("abc!@`".matches(".*"));
		// \d 表示数字-> [0-9]
		System.out.println("12345".matches("\\d{5}"));

		// \D 非数字. 只要不是0-9 都可以的.
		System.out.println("~!@#JACK".matches("\\D*"));

		// \s 空白字符. \r\n \t
		System.out.println("\r\n".matches("\\s+"));

		// \S 非空白字符, 除了空白字符,都可以.
		System.out.println("ABC".matches("\\S+"));

		// \w 单词字符. [a-zA-Z_0-9]
		System.out.println("ABCabc123_".matches("\\w+"));
		// \W 非单词字符, [^a-zA-Z_0-9]
	}

	public static void test3() {
		// 匹配用户名 -> 单词字符 a-z A-Z 0-9 _ 不能数字开头, 长度6~16位.
		String username = "jack123";
		String usernameRegex = "[a-zA-Z_][a-zA-Z_0-9]{5,15}";
		System.out.println(username.matches(usernameRegex));
		// 匹配密码 ->6位数字.
		String pwd = "123456";
		String pwdRegex = "[0-9]{6}";
		System.out.println(pwd.matches(pwdRegex));
		// 匹配邮箱?
	}

	public static void testPhone() {
		// 手机号码: 第一位1 ,第二位 3 4 5 7 8 11位 .
		String phone = "15858589586";
		phone = "13838384386";
		String phoneRegex = "[1][34578][0-9]{9}";

		System.out.println(phone.matches(phoneRegex));
	}

	/**
	 * <pre>
	 * [abc] a、b 或 c(简单类) 
	 * [^abc] 任何字符,除了 a、b 或 c(否定) 
	 * [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
	 * [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 
	 * [a-z&&[def]] d、e 或 f(交集) 
	 * [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) 
	 * [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
	 * </pre>
	 */
	public static void test2() {
		// [abc] a|b|c
		System.out.println("abc".matches("[abc]bc"));
		System.out.println("abc".matches("[abc]{3}"));

		// [^abc] 除了a b c
		System.out.println("a".matches("[^abc]"));

		// [a-z] 小写
		System.out.println("javax".matches("[a-z]+"));
		// [a-zA-Z] 大小写
		System.out.println("javaxABC".matches("[a-zA-Z]+"));
		// [0-9] 数字
		System.out.println("0123".matches("[0-9]{4}"));
		// [1-9] 数字,不包括0.
		System.out.println("123".matches("[1-9]{3}"));

		// [a-d[m-p]] a-d 或者 m-p
		System.out.println("xyz".matches("[a-d[m-p]]*"));

		// [a-z&&[def]]
		System.out.println("d".matches("[a-z&&[def]]"));
	}

	public static void testQq() {
		// 验证qq 号码. 必须是数字,不能以0开头. 10000 5位~12位.
		String qq = "10000";

		String qqRegex = "[1-9][0-9]{4,11}";

		System.out.println(qq.matches(qqRegex));
	}

	/**
	 * <pre>
	 * X? X,一次或一次也没有 
	 * X* X,零次或多次 
	 * X+ X,一次或多次 
	 * X{n} X,恰好 n 次 
	 * X{n,} X,至少 n 次 
	 * X{n,m} X,至少 n 次,但是不超过 m 次
	 * </pre>
	 */
	public static void test1() {
		// matches(正则表达式);
		// System.out.println("a".matches("a"));
		System.out.println("a".matches("a?"));
		System.out.println("".matches("a?"));

		// * 零次,或者多次.
		System.out.println("b".matches("a*b"));
		System.out.println("ab".matches("a*b"));

		// + 至少出现一次.
		System.out.println("aaaa".matches("a+"));
		System.out.println("aaaab".matches("a+b"));

		// [n] n次
		System.out.println("a".matches("a{1}"));

		// {n,} 至少n 次.
		System.out.println("aaa".matches("a{4,}"));

		// [n,m]
		System.out.println("aaaaa".matches("a{4,6}"));
	}
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics