黑马程序员——正则表达式-整理笔记

原创 2015年07月07日 16:53:22

                                                             ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


正则表达式

    概念:符合一定规则的表达式
    作用:专门用于操作字符串;
    特点:用于一些特定的符号来表示一些代码操作,这样就简化了书写;
    好处:可以简化对字符串的复杂操作;
    弊端:规则字符定义的越多,越不便阅读,造成阅读性差;

    常见的符号:

字符类
[abc] abc(简单类)
[^abc] 任何字符,除了 abc(否定)
[a-zA-Z] azAZ,两头的字母包括在内(范围)
[a-d[m-p]] admp[a-dm-p](并集)
[a-z&&[def]] def(交集)
[a-z&&[^bc]] az,除了 bc[ad-z](减去)
[a-z&&[^m-p]] az,而非 mp[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 输入的结尾
 
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,但是不超过 m 次 

字符类可以出现在其他字符类中,并且可以包含并集运算符(隐式)和交集运算符 (&&)。并集运算符表示至少包含其某个操作数类中所有字符的类。交集运算符表示包含同时位于其两个操作数类中所有字符的类。

1     字面值转义     \x
2     分组 [...]
3     范围 a-z
4     并集 [a-e][i-u]
5     交集 [a-z&&[aeiou]]

注意,元字符的不同集合实际上位于字符类的内部,而非字符类的外部。例如,正则表达式 . 在字符类内部就失去了其特殊意义,而表达式 - 变成了形成元字符的范围。


具体操作功能
             ①匹配:String matches()方法;用规则匹配整个字符串,只要有一处不符合规则,则返回false

public class Test1{
	
	public static void main(String[] args) {
		String qq="2343434";
    	String regex = "[1-9][0-9]{4,14}";  
        boolean flag = qq.matches(regex);  
        if(flag)  
            System.out.println("qq号码格式正确");  
        else  
            System.out.println("qq号码格式不正确");  
	}
}

             ②切割:String split(String regex)方法;根据给定正则表达式的匹配拆分此字符串

public class Test2{
	
	public static void main(String[] args) {
		 /* 
                        按照叠词进行切割,为了可以让规则的结果被重用,可以将规则用()封装成一个组,组都是 
                       有编号的,从1开始;  想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取 
        */
		   //通过叠词进行切割  
	      split("sdssssfddfgggdd", "(.)\\1");  
	        //通过点"."进行切割  
	      split("aaa.sss.sfsss", "\\.");           
	        //通过空格" "进行切割  
	      split("asas asas     asa", " +");   
	}
	 public static void split(String str, String regex){  
         
	        String [] arr = str.split(regex);  
	        System.out.println(arr.length);  
	        for(String s : arr){  
	            System.out.println(s);  
	        }  
	    }
}


             ③替换:String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

public class Test {

	public static void main(String[] args) {
		String str = "sfsdfdddvdvfsaaavxcvddd";
		String regex = "(.)\\1+"; // (.)任何字符出现一次或多次
		// String newStr1 = "\\$";//将叠词替换成$
		String newStr2 = "$1";// 将叠词替换为它本身单个字符
		str = str.replaceAll(regex, newStr2);
		System.out.println(str);
	}

             ④获取:Pattern p = Pattern.compile(reg); Matcher m = p.matcher(str);

/* 
 4,获取:将字符串中的符合规则的子串取出。 
 操作步骤: 
 1,将正则表达式封装成对象。 
 2,让正则对象和要操作的字符串相关联。 
 3,关联后,获取正则匹配引擎。 
 4,通过引擎对符合规则的子串进行操作,比如取出。 
 */
import java.util.regex.*;

class Test {
	public static void main(String[] args) {
		getDemo();
	}
	public static void getDemo() {
		String str = "jin tian wo yao qu duan lian。";
		System.out.println(str);
		String reg = "\\b[a-z]{4}\\b"; //匹配四个字母的单词
		// 将规则封装成对象。
		Pattern p = Pattern.compile(reg);
		// 让正则对象和要作用的字符串相关联。获取匹配器对象。
		Matcher m = p.matcher(str);
		// System.out.println(m.matches());//其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。
		                                    // 只不过被String的方法封装后,用起来较为简单。但是功能却单一。

		//m.find()将规则作用到字符串上,并进行符合规则的子串查找。
		while (m.find()) {
			//用于获取匹配后结果。
			System.out.println(m.group());
			System.out.println(m.start() + "...." + m.end());
		}
	}
}


// 演示 网络爬虫

/*是一段小程序,专门负责获取指定规则的数据。
 需求: 获取指定文件的特定信息,比如邮箱地址
 1 读取文件
 2 获取文件中的每一行字符串
 3 对该行字符串中的特定信息进行规则的匹配,将符合规则都获取出来,并进行存。
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NetBug {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		readMail();
	}

	public static void readMail() throws IOException {

		URL url = new URL("http://192.168.1.20:8080/index.jsp");// 爬服务器的邮箱

		URLConnection conn = url.openConnection();
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(
				conn.getInputStream()));

		// 如果不需要操作消息头,,不需要获取openConnection(); url.openStream();
		// BufferedReader bufr = new BufferedReader(new
		// FileReader("c:\\mail.htm"));

		String line = null;

		// 定义规则。mail规则。
		String reg = "[a-zA-Z0-9_]+@\\w+(\\.\\w+)+";
		Pattern p = Pattern.compile(reg);
		while ((line = bufIn.readLine()) != null) {// 匹配器通过流读的

			Matcher m = p.matcher(line);
			while (m.find()) {
				System.out.println(m.group());// 不应该打印,存到集合里,在存到数据库
			}
		}

		bufIn.close();

	}
}



                                                             ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马程序员--Struts2复习笔记

--------
  • li951418089
  • li951418089
  • 2015年12月24日 10:26
  • 279

黑马程序员学习笔记 Java的三大框架

如果做javaweb开发,spring是一定要学的,现在主流还是ssh,就是strurs+hibernate+spring,其中hibernate是持久层,用来持久化数据库操作的,如果不喜欢可以学点别...
  • Mr_April
  • Mr_April
  • 2015年07月03日 17:12
  • 1607

黑马程序员:Hibernate基础知识

android培训、java培训
  • u012159707
  • u012159707
  • 2013年09月26日 15:42
  • 610

黑马程序员_Java基础_我的day01学习笔记

01. 常见的DOS命令讲解 A:d: 回车 盘符切换 B:dir(directory):列出当前目录下的文件以及文件夹 C:cd (change directory)改变指定目录(进入指定目录)...
  • qq_21796869
  • qq_21796869
  • 2016年07月05日 10:36
  • 208

黑马程序员——struts2学习笔记一

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ struts2学习笔记一 一、strust2工作原理...
  • ajin2015
  • ajin2015
  • 2015年08月03日 23:04
  • 866

黑马程序员,黑马论坛----分享下收藏~java基础经典知识问题

1、面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容。抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分。抽象包含两个方面:一是过程抽象...
  • asdfasdafasdfhghgf
  • asdfasdafasdfhghgf
  • 2014年08月18日 22:43
  • 293

黑马程序员——JAVA学习整理笔记——常用类库

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1. StringBuffer 类 1.1 与String比较:       当使用一个字符串...
  • tubao1991
  • tubao1991
  • 2015年03月20日 08:56
  • 116

黑马程序员--- 送大家一份毕老师的笔记

文章来源:黑马程序员,黑马论坛。     送大家一份毕老师的笔记,自己一边看,一遍弄的,有很多截图,大家没事看两眼,当复习资料应该不错   http://pan.baidu.com/s/1p...
  • jasjsdajsdjf
  • jasjsdajsdjf
  • 2014年08月16日 20:55
  • 235

黑马程序员—黑马6期又出了一个面5家拿4家offer的offer哥,给力~~~标题要长~

文章来源:黑马程序员,黑马论坛
  • heima_25
  • heima_25
  • 2014年08月24日 13:07
  • 657

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——正则表达式-整理笔记
举报原因:
原因补充:

(最多只允许输入30个字)