正則表達式總結

正則表達式用於操作字符串的規則,這些規則由一些符號所組成。使用正則表達式可以進行更復雜的操作,而且這種複雜的操作要比方法短的多。

功能:
1,匹配。使用的是String類中的matches方法。

2,切割。使用的String類split方法。

3,替換。

4,查找。
    1,將正則規則通過Pattern類中的static方法complie,封裝成Pattern對象,
    2,通過Pattern類中matcher方法與字符串相關聯,獲取匹配器對象。
    3,通過匹配器的方法來操作字符串。如:find是否找到,group取去匹配後的字符串。

其實String類中有關正則表達式的方法,底層都是先將傳入的正則規則封裝成Pattern對象。
然後通過Pattern對象獲取Matcher對象,在調用Matcher的方法完成的。

示例:

	/*
	獲取文件中的email地址。
	思路:
	1,既然要讀取是一個文件,需要使用字符流。FileReader。BufferedReader。
	2,讀到一行數據,就和規則相關聯,取出這行字符串中所有的email地址。
	3,將email地址進行存儲。
	*/
	public static void getMail()throws IOException
	{
		BufferedReader bufr = new BufferedReader(new FileReader("mail.txt"));
		
		String line = null;

		String mailreg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";

		Pattern p = Pattern.compile(mailreg);

		while((line=bufr.readLine())!=null)
		{
			Matcher m = p.matcher(line);
			while(m.find())
			{
				System.out.println(m.group());
			}
		}
	}

	/*
	 * 校驗郵件
	 */
	public static void checkMail()
	{
		String  mail = "[email protected]";

		String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
		
		//reg = "\\w+@\\w+(\\.\\w+)+";//寬鬆式校驗。

		boolean b = mail.matches(reg);

		System.out.println("mail:"+b);
	}

	/*
	192.168.1.253 10.10.10.10 127.0.105.1 2.2.2.2 30.30.30.30
	將這些ip地址按照ip地址段的順序排序。
	*/
	public static void ipSort()
	{
		String ip = "192.168.1.253 10.10.10.10 127.0.105.1 2.2.2.2 30.30.30.30";

		//最方便方式,就是按照字符串的字典順序比較。但是必須要保證每一個地址的位數是相同的。
		//所以在不足三位段上補零,首先按照最大補零數進行填充。

		ip = ip.replaceAll("(\\d+)","00$1");
		System.out.println(ip);//補完。

		//對補完0的ip,進行每段最後三位的保留
		ip = ip.replaceAll("0*(\\d{3})","$1");
		System.out.println(ip);//192.168.001.253 010.010.010.010 127.000.105.001 002.002.002.002 030.030.030.030

		//通過空格進行切割。
		String[] arr = ip.split(" ");
		TreeSet<String> ts = new TreeSet<String>();
		
		for(String s: arr)
		{
			ts.add(s);
		}

		for(String s : ts)
		{
			System.out.println(s.replaceAll("0*([0-9]+)","$1"));
		}
	}

	/*
	 * 替換:使用指定字符串替換符合規則的字符串。
	 *       將疊詞多個替換成一個
	 */
	public static void replaceReg()
	{
		String str = "dfqqqghjzzkltpppyu";

		String s = str.replaceAll("(.)\\1+","$1");

		System.out.println(s);
	}

	/*
	 * 切割:按照指定規則字符串。
	 */
	public static void splitStr()
	{
		String str = "we.rw.er.ty";//
		String reg = "\\.";//對於 . 在正則中是一個特殊字符。如果只當作普通符號來用,必須要轉義。
		
		str = "dfqqqghjzzkltpppyu";
		reg = "(.)\\1+";// 用疊詞作爲分隔符將字符串分開
		
		String[] arr = str.split(reg);
		for(String s : arr)
		{
			System.out.println(s);
		}
	}

	/*
	查找:獲取字符串中指定的三個單詞。
	思路:
	想要獲取指定單詞,使用匹配是不可以的,因爲符合要求的結果不是boolean類,而是很多單個字符串。
	這時就要使用正則表達式對象。Pattern。
	*/
	public static void getWord()
	{
		String str ="da jia ming tian fang jia le ,shuang!";

		String reg = "\\b[a-z]{4}\\b";
		
		//1,將正則表達式封裝成Pattern。使用Pattern對象中 compile方法。
		Pattern p = Pattern.compile(reg);

		//2,將正則對象和字符串進行關聯。使用的matcher方法。該方法會返回一個匹配器對象Matcher。
		Matcher  m = p.matcher(str);
		
		//3,使用匹配器對象的find方法去找是否有符合規則的內容。通過group獲取查找到的字符串。
		while(m.find())
		{
			System.out.println(m.group());
		}
	}

	/*
	 * 校驗電話。
	 */
	public static void checkTel()
	{
		String tel = "15800190000";
		String telreg = "1[35]\\d{9}";
		System.out.println(tel.matches(telreg));
	}


	/*
	 * 演示數量詞。
	 */
	public static void checkStr()
	{
		String str = "acccb";

		String strreg1 = "ac{3}b";//true,c只能出現3次
		String strreg2 = "ac*b";//true, * c出現0次或者多次都可以。
		String strreg3 = "ac?b";//false, ? 表示 c出現1次或者0次。
		String strreg4 = "ac+b";//true ,+ 表示 c出現1次或者多次。
		System.out.println("str="+str.matches(strreg1));
		System.out.println("str="+str.matches(strreg2));
		System.out.println("str="+str.matches(strreg3));
		System.out.println("str="+str.matches(strreg4));
	}

	/*
	 *普通方法判斷一個QQ號,要求:5~15,不可以0開頭,必須都是數字。
	 */
	public static void checkQQ(String qq)
	{
		int len = qq.length();
		if(len>=5 && len<=15)
		{
			if(!qq.startsWith("0"))
			{
				try
				{
					long num = Long.parseLong(qq);
					System.out.println(num);
				}
				catch (NumberFormatException e)
				{
					System.out.println("fifa qq");
				}
			}
			else
				System.out.println("no 0 start");
		}
		else
			System.out.println("qq len nono");
	}
	
	/*
	 * 正則表達式判斷一個QQ號
	 */
	public static void checkQQByReg()
	{
		String qq = "552678";
		String qqreg = "[1-9]\\d{4,14}";
		boolean b = qq.matches(qqreg);
		System.out.println("qq:"+b);

//		Pattern p = Pattern.compile(qqreg);
//		Matcher m = p.matcher(qq);
//		boolean b2 = m.macthes();
	}


發佈了89 篇原創文章 · 獲贊 13 · 訪問量 81萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章