黑马程序员-正则表达学习笔记

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

----------------------------------------正则表达式----------------------------------------

正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。

我们都在Windows下查找过某些文件:

       例如:

              查找所有的word文档:*.doc

正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求

正则表达式的组成规则:规则字符在java.util.regex Pattern类中

       常见组成规则

       字符

       字符类

       预定义字符类

       边界匹配器

       数量词

正则表达式的字符类:

public class Demo {
	public static void main(String[] args) {
		String str = "had";
		//1.字符串中是否以h开头,以d结尾,而且中间只有一个字符,而且是元音字母a、e、i、o、u?
		String regex = "h[aeiou]d";
		System.out.println("1." + str.matches(regex));
		//2.字符串中是否以h开头,以d结尾,而且中间只有一个小写英文字母?
		str = "h_d";
		regex = "h[a-z]d";
		System.out.println("2." + str.matches(regex));
		//3.字符串是否以大写英文字母开头,后跟id?
		str = "Hid";
		regex = "[A-Z]id";
		System.out.println("3." + str.matches(regex));
		//4.字符串首字母是否非数字?
		str = "1id";
		regex = "[^0-9]id";
		System.out.println("4." + str.matches(regex));
		//5.以b 或 c 或 d 开头,中间字符是 a,并且以 d 或 t 结尾    的字符串;
		str = "bad";
		regex = "[bcd]a[dt]";
		System.out.println("5." + str.matches(regex));
	}
}

正则表达式的逻辑运算符:

      1.&& : 逻辑与(并且)

      2.|  : 逻辑或(或者)

public class Demo {
	public static void main(String[] args) {
		//1.判断小写辅音字母:
		String str = "a";
		String regex = "[a-z&&[^aeiou]]";
		System.out.println("1." + str.matches(regex));
		//2.判断首字母为h 或 H ,后跟一个元音字母,并以 d 结尾:
		regex = "[h|H][a|e|i|o|u]d";//效果同:[hH][aeiou]d
		
	}
}

 正则表达式中的预定义字符类:


 注意:在Java中将反斜线看做转义序列的开头。因此必须在正则表达式中将反斜线指定为:\\:

public class Demo {
	public static void main(String[] args) {
		// 1.判断是否是三位数字:
		String str = "014";
		String regex = "[0-9][0-9][0-9]";
		System.out.println("1." + str.matches(regex));

		regex = "\\d\\d\\d";
		System.out.println("1-2." + str.matches(regex));

		// 2.判断字符串是否以h开头,中间是任何字符,并以d结尾:"h.d"
		str = "h\\d";// h\d
		regex = "h.d";
		System.out.println("2." + str.matches(regex));

		// 3.判断字符串是否是”had.”:
		str = "had.";
		regex = "had\\.";// 或者:"had[.]"
		System.out.println("3." + str.matches(regex));
		// 4.判断手机号码(1开头,第二位是:3或5或8,后跟9位数字):
		str = "18518151175";
		regex = "1[358]\\d\\d\\d\\d\\d\\d\\d\\d\\d";
		System.out.println("4." + str.matches(regex));
	}
}

  正则表达式中的限定符:限定符位于模式中子序列的后侧,确定了子序列的重复方式。


 

public class Demo {
	public static void main(String[] args) {
		// 1.判断1位或多位数字:
		String str = "14389427584937438294732890574829057489200a";
		String regex = "\\d+";
		System.out.println("1." + str.matches(regex));

		// 2.判断手机号码:
		str = "18518151175";
		regex = "1[358]\\d{9}";
		System.out.println("2." + str.matches(regex));

		// 3.判断小数(小数点最多1次)
		str = "3324243214.343";
		regex = "\\d+\\.?\\d+";
		System.out.println("3." + str.matches(regex));

		// 4.判断数字(可出现或不出现小数部分):
		str = "3.14";
		regex = "\\d+(\\.?\\d+)?";
		System.out.println("4." + str.matches(regex));

		// 5.判断一个QQ号码(5-15位数字,不能以0开头):
		str = "1691530430";
		regex = "[1-9]\\d{4,14}";
		System.out.println("5." + str.matches(regex));

		// 6.参考并修改上面第四个例子,使之满足:"22."的格式;
		str = ".3";
		regex = "\\d+(\\.?\\d*)?";
		System.out.println("6." + str.matches(regex));

		// 7.满足:+20,-3,22.格式:
		str = "20.43274839";
		regex = "[+-]?\\d+(\\.?\\d*)?";
		System.out.println("7." + str.matches(regex));
	}
}

 正则表达式的分组:

public class Demo {
	public static void main(String[] args) {
		String str = "DG8FV-B9TKY-FRT9J-6CRCC-X5Q8G";
		String regex = "([A-Z0-9]{5}-){4}[A-Z0-9]{5}";
		System.out.println("1." + str.matches(regex));
	}
}

正则的功能:

切割功能:

        使用String类中的split方法。

public class Demo {
	public static void main(String[] args) {
		// A.切割字符串"aa,bb,cc";
		String str = "aa,bb,cc";
		String[] strArray = str.split("[,]");
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("--" + strArray[i]);
		}
		// B.切割字符串"aa.bb.cc";
		str = "192.168.100.232";
		strArray = str.split("[.]");
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("--" + strArray[i]);
		}
		// C.切割字符串“-1 99 4 23”;
		str = "-1 99 4 23";
		strArray = str.split("[ ]");
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("--" + strArray[i]);
		}
		System.out.println("-----------------------------");
		// D."-1   99 4     23";
		str = "-1   99 4     23";
		strArray = str.split("[ ]+");
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("--" + strArray[i]);
		}
	}
}

 替换功能:

        使用String类中的replaceAll方法。

public class Demo {
	public static void main(String[] args) {
		//1.用”#”替换叠:"sdaaafghccccjkqqqqql";
		String str = "sdaaafghccccjkqqqqql";
		String regex = "(.)\\1+";
		System.out.println("将叠词替换为#:" + str.replaceAll(regex, "#"));
		
		//2.把多个叠词变成一个
		System.out.println("将叠词变为1个:" + str.replaceAll(regex, "$1"));
		
		//3.:有些论坛不允许发电话,qq号,银行账号等. 把数字用"*"替换
		str = "wert13245asfklwyoeworewsfd6744232433fafs";
		System.out.println("将数字替换为*符合:" + str.replaceAll("\\d+", "*"));
	}
}

 获取功能:

        使用Pattern.compile(regex)

public class RegexGetDemo {
	public static void main(String[] args) {
		getStrDemo();

	}

	/***
	 * 获取例子
	 */
	public static void getStrDemo() {
		String str = "ming tian jiu yao fang jia le,da jia....";
		String regex = "\\b[a-z]{3}\\b";// "\\b":是单词边界标识

		str = "12q3233534";
		String reg = "[1-9]\\d{4,14}";
		// 将规则封装成对象。
		Pattern p = Pattern.compile(regex);
		// 让正则对像和要作用的字符串相关联,获取匹配器对象。
		Matcher m = p.matcher(str);
		// 其实String类中的matches()方法。用的就是Pattern和Matcher对象来完成的。
                //只不过被String的方法封装后,用起来较为简单,但功能单一,
                 //matches:是整个字串完全匹配
		System.out.println(m.matches());

		// 将规则作用到子串上,进行符合规则的字串查找,
		boolean b = m.find();
		System.out.println(b);
		System.out.println(m.group());// 用于获取匹配后结果。

		while (m.find()) {
			System.out.println(m.group());
			// 获取单词的索引位置(含头不含尾)
			System.out.println(m.start() + "...." + m.end());
		}
	}
}

猜你喜欢

转载自shuangxi-zhu.iteye.com/blog/2247097