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

原创 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培训、期待与您交流! -------

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

相关文章推荐

Android第三方框架之xListView的使用方法

==最近向用xListView实现刷新效果,在网上没有找到相关的例子和方法说明。自己看了会儿demo在此留下笔记以供日后复习== 第一步:到官网下载第三方包,拷贝到自己的项目中。要注意的地方是在lay...

“黑马程序员”正则表达式+html+css笔记

----- http://www.itheima.com" target="blank">android培训、http://www.itheima.com" target="blank">java培训...

黑马程序员_JAVA笔记25——正则表达式

------- android培训、java培训、期待与您交流! ---------- 一、正则表达式,可以理解为符合一定规则的表达式     1、作用,用于专门操作字符串。     2、好...

黑马程序员_学习笔记第24天——正则表达式

---------------------- ASP.Net+Android+IOS开发、href="http://edu.csdn.net"target="blank">.Net培训、期待与您交流!...

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

正则表达式 通常用于程序设计过程中,对输入数据的格式进行检查,如果匹配正则表达式则数据格式正确,否则格式错误。...
  • kentw1
  • kentw1
  • 2015年09月08日 16:22
  • 212

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

---------------------- android培训、java培训、期待与您交流! ----------------------package cn.oyb.ce; import java...

黑马程序员_.NET学习14(正则表达式笔记)

---------------------- Windows Phone 7手机开发、.Net培训、.NET学习型技术博客、期待与您交流! ---------------------- 正则...
  • yqff520
  • yqff520
  • 2012年09月01日 22:46
  • 141

黑马程序员Java学习笔记之正则表达式

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。正则表达式并不是Java独有的,而且学习起...

黑马程序员---自学随堂笔记----正则表达式

1、要匹配手机号如13xxx,15xxx,18xxx代码如下 String tel = “13xxxxxxxxx;” String telReg = “1[358]\d{9}”; 判断boole...

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

---------------------- ASP.Net+Android+IO">http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S、...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——正则表达式-整理笔记
举报原因:
原因补充:

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