黑马程序员--正则表达式

Java基础技术之 正则表达式


1.正则表达式


        正则表达式善于处理文本,对匹配、搜索和替换等操作都有意想不到的作用。正因如此,

正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率。
正则表达式应用于程序设计语言中,首次是出现在 Perl 语言,这也让 Perl 奠定了正则表达式旗手的地位。

现在,它已经深入到了所有的程序设计语言中,在程序设计语言中,正则表达式可以说是标准配置了。


   Java 中从 JDK 1.4 开始增加了对正则表达式的支持,至此正则表达式成为了 Java 中的基本类库,

使用时不需要再导入第三方的类库了。Java 正则表达式的语法来源于象征着正则表达式标准的 Perl 语言,

但也不是完全相同的,具体的可以参看 Pattern 类的 API 文档说明。


2.正则表达式的常用符号意思:


正则表达式的规则字符:

A:字符
 x 字符 x,任意字符代表自己本身。
 \\ 反斜线字符
 \r 回车
 \n 换行
 
B:字符类
 [abc] a、b 或 c,任意字符一次。
 [^abc] 任何字符,除了 a、b 或 c
 [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内
 [0-9] 任意的数字字符一次
 
C:预定义字符类
 . 任意的字符
 \d 数字:[0-9]
 \w 单词字符:[a-zA-Z_0-9]
  单词字符:英文,数字,及_
  
D:边界匹配器
 ^ 行的开头
 $ 行的结尾
 \b 单词边界(也就是说这里出现的不能是单词字符)
  abc hello world?haha
  
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

F:组
捕获组可以通过从左到右计算其开括号来编号。组零始终代表整个表达式。

((A)(B(C)))

第一组:(A)(B(C))
第二组:A
第三组:B(C)
第四组:C

3.正则表达式的Matches方法

以下内容将用来测试 String的matches方法。

其格式是: * 正则表达式的判断功能: public boolean matches(String regex)

看到这个方法,我们应该知道有一个字符串对象调用该方法,还应该有一个字符串规则。

以下是一段校验字符和手机号码是否符合正则规则的matches方法。

public class RegexDemo {
	public static void main(String[] args) {
		// 判断字符串”qaq”中间的字符是否是元音(aeiou)
		 String regex = "q[aeiou]q";
		 String s = "qaq";
		 boolean flag = s.matches(regex);
		 System.out.println(flag);
		
		 //判断是不是正规的手机号码?
		while (true) {

			Scanner sc = new Scanner(System.in);
			System.out.println("请输入手机号码:");
			String st = sc.nextLine();
			if ("over".equals(st)) {
				break;
			}
			String regex1 = "1[35]\\d{9}";
			boolean flag2 = st.matches(regex1);
			System.out.println(flag2);

		}

	}
}

4.正则表达式的切割功能。

正则表达式的切割功能可以根据正则表达式,从一串字符串中提取出自己所需要的内容进行操作

和运用。

public class RegexDemo {
	public static void main(String[] args) {
		String regex = ",";
		String letters = "aa,bb,cc";
		String[] strArray = letters.split(regex);
		for (String st : strArray) {
			System.out.println(st);
		}
		System.out.println("********************");
		String let = "ni hao.zhong guo .wo lai le.";
		String regex1 = "\\.";
		String[] strArray1 = let.split(regex1);
		for (String st1 : strArray1) {
			System.out.println(st1);
		}
		System.out.println("********************");

		String let2 = "-1 99 4 23";
		String regex2 = " ";
		String[] strArray2 = let2.split(regex2);
		for (String st2 : strArray2) {
			System.out.println(st2);
		}
		System.out.println("********************");

		String let3 = "-1     99              4 23";
		String regex3 = " +";
		String[] strArray3 = let3.split(regex3);
		for (String st3 : strArray3) {
			System.out.println(st3);
		}
		System.out.println("********************");

		String let4 = "D:\\itcast\\20131130\\day27\\code";
		String regex4 = "\\\\";
		String[] strArray4 = let4.split(regex4);
		for (String st4 : strArray4) {
			System.out.println(st4);
		}
	}
}

5.正则表达式的替换功能。

替换功能: public String replaceAll(String regex,String replacement)

 用给定的字符串去替换字符串对象中满足正则表达式的字符。

public class RegexDemo {
	public static void main(String[] args) {
		String str = "sdaaafghccccjkqqqqql";
		String regex = "(.)\\1+";
		String strs = str.replaceAll(regex, "#");
		System.out.println(strs);
		// 但是如果我们要保留一次叠词呢?怎么办?
		// 引进一个字符$
		System.out.println("*************");
		String str1 = "sdaaafghccccjkqqqqql";
		String regex1 = "(.)\\1+";
		String strs1 = str1.replaceAll(regex1, "$1");
		System.out.println(strs1);
		System.out.println("*************");
		
		String str2 = "wert13245asfklwyoeworewsfd6744232433fafs";
//		String regex2 = "\\d+";
		String regex2 = "\\d";
		String strs2 = str2.replaceAll(regex2, "#");
		System.out.println(strs2);
	}
}

6.获取功能Pattern和Matcher

获取功能:
 使用模式对象Pattern和匹配器对象Mathcher

public class RegexDemo {
	public static void main(String[] args) {
		// String regex ="a*b";
		// Pattern p = Pattern.compile(regex);
		// Matcher m = p.matcher("aaaaab");
		// boolean flag = m.matches();
		// System.out.println(flag);
		//
		String regex = "\\b[a-z]{3}\\b";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher("kuai dian guo lai ,wo dai ni qu wan ,pao ba!");
		// public boolean find()
		// 判断看是否存在有满足条件的子串
		// boolean flag = m.find();
		// System.out.println(flag);
		//
		// String str = m.group();
		// System.out.println(str);

		while (m.find()) {
			System.out.print(" " + m.group());

		}
		// //获取子串
		// //public String group()

	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值