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

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

 

正则表达式:符合一定规则的操作字符串的表达式

 好处:可以简化对字符串的复杂操作。
 弊端:符号定义越多,正则越长,阅读性越差。

正则字符

构造                          匹配

字符

x

字符 x

\\

反斜线字符

\0n

带有八进制值 的字符 n (0 <= n <= 7)

\0nn

带有八进制值 的字符 nn (0 <= n <= 7)

\0mnn

带有八进制值 的字符 mnn(0 <= m <= 30 <= n <= 7

\xhh

带有十六进制值 0x 的字符 hh

\uhhhh

带有十六进制值 0x 的字符 hhhh

\t

制表符 ('\u0009')

\n

新行(换行)符 ('\u000A')

\r

回车符 ('\u000D')

\f

换页符 ('\u000C')

\a

报警 (bell) 符 ('\u0007')

\e

转义符 ('\u001B')

\cx

对应于 x 的控制符

 

字符类

[abc]

a或 c(简单类)

[^abc]

任何字符,除了 a或 c(否定)

[a-zA-Z]

a到 或 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]

a到 或 到 p[a-dm-p](并集)

[a-z&&[def]]

d或 f(交集)

[a-z&&[^bc]]

a到 z,除了 和 c[ad-z](减去)

[a-z&&[^m-p]]

a到 z,而非 到 p[a-lq-z](减去)

 

预定义字符类

.

任何字符(与行结束符可能匹配也可能不匹配)

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

空白字符:[ \t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

单词字符:[a-zA-Z_0-9]

\W

非单词字符:[^\w]

边界匹配器

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾

组是正则表达式用来封装部分正则的封装体 就跟函数体里封装的是代码一样 组可以内嵌 就跟类里面还可以封装类部类一样  每个组都有指针 通过指针操作组 指针0表示整个正则表达式  所以组的指针从1开始  在正则表达式内部调用组用\指针 由于要经过字窜转义所以写成\\指针  在参数列表内调用定一个正则表达式的组应该用$指针

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

1    

((A)(B(C)))

2    

\A

3    

(B(C))

4    

(C)

正则表达式操作步骤:

1.按指定的模式将正则表达式编译封装成正则表达式对象

2.让正则表达式对象和要操作的字符串序列按模式执行匹配操作创建获取匹配引擎   也可以理解为让正则对象和要操作的字符串相关联,关联后,获取正则匹配引擎。

3.通过匹配器引擎对符合规则的子串进行操作,比如取出。

4.获取:将字符串中的符合规则的子串取出。

一些代码联系

package com.itheima;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SecretKey {
	/**
	 * 需求: 将任意几段IP进行排序
	 */
	public static void getIps() {
		String str = "192.168.218.131     10.1.1.1 20.1.1.20 ";
		String[] ips = str.split(" +");// 分割出每个ip
		String regex = "[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}";

		TreeSet<String> ip = new TreeSet<String>();
		for (int i = 0; i < ips.length; i++) {
			if (!ips[i].matches(regex)) {// 验证ip的格式
				System.out.println(ips[i] + " 不是一个有效的ip");
				break;
			}
			ips[i] = ips[i].replaceAll("(\\d+)", "00$1");// 将每个ip个各个字段都保证至少是三位
			ips[i] = ips[i].replaceAll("0*(\\d{3})", "$1");
			ip.add(ips[i]);
		}
		System.out.println(ip);

	}

	/**
	 * 需求: 将下列字符串转成:我要学编程.
	 */
	static void textFormat() {
		String str = "我我...我     我我...我      要要..要             要...要要...学"
				+ "学学....学学...编.......编                  编...编程..程.程程...程...程";
		// 可以先把.和空格去掉在把重复的字编程单个的字
		str = str.replaceAll("\\.", "");
		System.out.println("去掉所有的点之后:" + str);
		str = str.replaceAll(" +", "");
		System.out.println("去掉所有的空格之后:" + str);
		str = str.replaceAll("(.)\\1+", "$1");
		System.out.println("去掉所有的叠词之后:" + str);
	}

	/**
	 * 需求: 验证手机号码
	 */
	static void checkPhone() {
		String phone = "18766500058";
		String regex = "1[3458]\\d{9}";
		System.out.println(phone.matches(regex));
	}

	/**
	 * 需求:得到一个文件中所有的邮箱
	 */
	static void getEmails() throws Exception {
		BufferedReader bfr = new BufferedReader(new FileReader("d://1.txt"));
		String regex = "[0-9a-zA-Z_]+@\\w+(\\.+\\w+){1,2}";
		String line;
		Pattern p = Pattern.compile(regex);
		while ((line = bfr.readLine()) != null) {
			Matcher m = p.matcher(line);
			while (m.find()) {
				System.out.println(m.group());
			}
		}
	}

	public static void main(String[] args) throws Exception {
		System.out.println("------格式化文字------");
		textFormat();
		System.out.println("------验证一个手机号码------");
		checkPhone();
		System.out.println("------把给定的几个ip进行排序------");
		getIps();
		System.out.println("------得到一个文件中所有的ip------");
		getEmails();
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值