1. 程式人生 > >JAVA中的正則表示式(pattern/match)

JAVA中的正則表示式(pattern/match)

正則表示式概念

所謂正則表示式就是處理字串的特殊字串
用途
	字串匹配(字元匹配)
	字串查詢(是建立在匹配之上的查詢)
	字串替換(是建立在查詢的結果之後的替換)
例如
	IP地址是否正確
	從網頁中揪出Email地址
	從網頁揪出連結
類
	java.lang.String
	java.util.regex.Pattern
	java.util.regex.Matcher
要點		
	//一個反斜線
	String str1 = "\\";
	//正則表示式的一個反斜線使用兩個反斜線,在java中表示就再需要兩個反斜線轉義
	System.out.println(str1.matches("\\\\"));
	//POSIX Style,這種寫法不建議使用,如果要使用查API
	System.out.println("a".matches("\\p{Lower}"));
	//空白行
	" \n".matches("^[\\s&&[^\n]]*\\n$");
	//郵箱
	String regex1 = "[\\w[.-]]+";
	String regex2 = "@";
	String regex3 = "[\\w[.-]]+";
	String regex4 = "\\.";
	String regex5 = "[\\w]+";
	String regex = regex1+regex2+regex3+regex4+regex5;
	System.out.println("
[email protected]
".matches(regex));

正則表示式的基本語法

普通字元(字母,數字,漢字,下劃線)		
	一個普通字元在表示式中只匹配與之相同的一個字元
	表示式k在字串sky進行匹配時,將匹配成功
\r,\n,\t,\f
	表示回車符,換行符,製表符,換頁符
.	
	任意一個字元
X?	
	表示X可以出現0次或者1次
X+	
	表示X可以出現1次或者多次
X*
	表示X可以出現任意次
X{n}
	表示X可以出現n次
X{m,n}
	表示X可以最少出現m次,最多出現n次
X{n,}
	表示X最少出現n次
[ ]
	匹配中括號中任意一個字元
[^ ]
	匹配中括號中字元之外的任意一個字元
\d
	表示0~9之間的任意一個數字字元,即[0-9]
\D
	表示0~9之外的任意數字字元,即[^0-9]
\r,\n,\t,\f
	表示回車符,換行符,製表符,換頁符
\s
	表示空格,製表符,換頁符等空白字元的任意一個
\S
	表示空白字元以外的任意一個字元,即[^\s]
\w
	表示字母,數字,下劃線中的任意一個字元,即[a-zA-Z_0-9]
\W
	表示字母,數字,下劃線以外的任意一個字元,即[^a-zA-Z_0-9]
^
	該符號不匹配任何字元,字串開始的位置,即^h必須以h開頭
$
	該符號不匹配任何字元,字串結束的位置,即r$必須以r結尾
\b
	該符號不匹配任何字元,表示單詞的邊界
\B
	該符號不匹配任何字元,表示非單詞的邊界,即[^\b]
|
	用來連線兩個表示式,表示或的關係
	X|Y 表示X或者Y中的任意字元
()
	作為一個單元,一個分組
\n(n表示一個數字)
	有分組的情況下,表示對分組的引用
	\1表示對分組1的引用
\
	轉義字元,當一個符號自身有意義而又要表示這個字元的時候,就需要轉義
	\^表示^,\$表示$
?
	如果在?,+,*,{n},{m,n},{n,}後面,表示次數按非貪婪模式進行匹配,
		即按照匹配模式進行最小限度的匹配

貪婪 VS 非貪婪 VS 獨佔


import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Test {
	public static void main(String[] args) throws Exception {
		String str = "aaaa5bbbb6";
 
		/*
		 * 貪婪的
		 * 一次吃進最多的10個字元,不匹配,再吐出來一個,匹配了,結束了
		 */
		String regex1 = ".{3,10}[0-9]";
		Matcher m1 = Pattern.compile(regex1).matcher(str);
		if (m1.find())
			System.out.println(m1.start() + "-" + m1.end());
		else
			System.out.println("not match!");
 
		/*
		 * 非貪婪的
		 * 一次吃進最少的3個字元,然後看後面哪個是不是數字,
		 * 再吞一個,然後再看後面哪個是不是數字,匹配了,結束了
		 */
		regex1 = ".{3,10}?[0-9]";
		m1 = Pattern.compile(regex1).matcher(str);
		if (m1.find())
			System.out.println(m1.start() + "-" + m1.end());
		else
			System.out.println("not match!");
 
		/*
		 * 獨佔的
		 * 一次吃進最多的10個字元,不匹配,不吐出來,不匹配了,結束了
		 */
		regex1 = ".{3,10}+[0-9]";
		m1 = Pattern.compile(regex1).matcher(str);
		if (m1.find())
			System.out.println(m1.start() + "-" + m1.end());
		else
			System.out.println("not match!");
	}
}
/*
列印結果:
	0-10
	0-5
	not match!
*/

相關推薦

JAVA表示式pattern/match

正則表示式概念 所謂正則表示式就是處理字串的特殊字串 用途 字串匹配(字元匹配) 字串查詢(是建立在匹配之上的查詢) 字串替換(是建立在查詢的結果之後的替換) 例如 IP地址是否正確 從網頁中揪出Email地址 從網頁揪出連結 類 java.lang.Stri

Java表示式相關類Pattern和Matcher的使用

在Java中,java.util.regex包定義了正則表示式使用到的相關類,其中最主要的兩個類為:Pattern、Matcher:   Pattern 編譯正則表示式後建立一個匹配模式;   Matcher 使用Pattern例項提供的正則表示式對目標字串進行匹

java表示式工具類:Pattern和Macher

原地址 java.util.regex是一個用正則表示式所訂製的模式來對字串進行匹配工作的類庫包。 1.簡介: java.util.regex是一個用正則表示式所訂製的模式來對字串進行匹配工作的類庫包。 它包括兩個類:Pattern和Matcher

表示式Pattern和Matcher類

正則表示式: 概念:正確規則的表示式 規則java給我們定的,是指一個用來描述或者匹配一系列符合某個句法規則的字串的單個字串。其實就是一種規則。有自己特殊的應用。 正則表示式的組成規則 規則字元在java.util.regex Pattern類中 A:字元 x 字元 x。舉例:‘

java表示式的瞭解與實踐記錄

Pattern pattern = Pattern.compile("^\\S+/q/"); Matcher matcher = pattern.matcher(resultString); String qrcode=""; while(matcher.find()){ String path

表示式十五——統計程式碼的程式碼行、註釋行和空白行

package com.wy.regular; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFo

Java 表示式

字元類: [abc] a、b 或 c [^abc] 任何字元,除了abc [a-zA-Z] a 到 z 或 A 到 Z ,兩頭的字母包括在內 [0-9] 0到9 的字元都包括 預定義字元類: . 任何字元 \d 數字:[0-9] 示例:判斷手機號的規則: String regex = “

java-Script-----表示式15

收集整理了15個常用的javaScript正則表示式,其中包括使用者名稱、密碼強度、整數、數字、電子郵件地址(Email)、手機號碼、身份證號、URL地址、 IPv4地址、 十六進位制顏色、 日期、 QQ號碼、 微訊號、車牌號、中文正則。表單驗證處理必備。 1 使用者名稱正

python表示式re模組

一、簡介 正則表示式本身是一種小型的、高度專業化的程式語言,而在python中,通過內嵌整合re模組,程式媛們可以直接呼叫來實現正則匹配。正則表示式模式被編譯成一系列的位元組碼,然後由用C編寫的匹配引擎執行。 二、正則表示式中常用的字元含義 1、普通字元和11個元字

java表示式Pattern和Matcher類小結

  最近在實際開發中遇到了2個坑,都和正則表示式有關。一個是public String[] split(String regex),入參居然是正則表示式!!!另一個坑與Pattern、Matcher類的操作有關。都是對java的正則表示式不夠熟悉導致。特地整理一

1000行程式碼徒手寫表示式引擎【1】--JAVA表示式的使用

簡介: 本文是系列部落格的第一篇,主要講解和分析正則表示式規則以及JAVA中原生正則表示式引擎的使用。在後續的文章中會涉及基於NFA的正則表示式引擎內部的工作原理,並在此基礎上用1000行左右的JAVA程式碼,實現一個支援常用功能的正則表示式引擎。它支援貪婪匹配和懶惰匹配;支援零寬度字元(如“\b”, “\B

[轉]python表示式re模組

轉自:https://www.cnblogs.com/tina-python/p/5508402.html 一、簡介 正則表示式本身是一種小型的、高度專業化的程式語言,而在python中,通過內嵌整合re模組,程式媛們可以直接呼叫來實現正則匹配。正則表示式模式被編譯成一系列的位元組碼

Java表示式匹配的語法規則

, package com.fsti.icop.util.regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class RegExpValidatorUt

Java表示式筆記歸納

public class Regex { //1、正則表示式:是有規則的一種表示式 // 我們常用regex來表示正則表示式 // 主要作用: // 通過一種有規則的字元模式,對 目標字串進行查詢、提取、替換、分割的作用 // 典型的應用場景:校驗相關字元是否匹配規則:使用者名稱

java表示式驗證日期

/** *正則表示式驗證日期格式     包括潤二月 **/ // public static void main(String[] args) { //  Pattern p = Pattern //      .compile("^((\\d{2}(([02468][

JAVA表示式的二次轉義

需求:格式化金額,替換伺服器返回的格式化字串中的”{0}”為金額 public class Test { public static void main(String[] args) { String unformattedMoney

Java表示式去除html標籤

    注:這是Java正則表示式去除html標籤方法。     private static final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // 定義sc

java表示式運用例項(用String類的matches方法演示)

java中正則表示式運用例項(參看java中正則表示式運用詳解): 測試程式碼  package test;   /**    * 在String的matches()方法,split()方法中使用正則表示式.    * @author fhd001    */   pu

Java表示式的分割案例

import java.util.Scanner; public class SplitDemo {/**正則表示式的分割案例:*  在鍵盤錄入一個年齡,判斷是不是按照你要求的年齡段。* @param args*/public static void main(String

JAVA 表示式 超詳細

在Sun的Java JDK 1.40版本中,Java自帶了支援正則表示式的包,本文就拋磚引玉地介紹瞭如何使用java.util.regex包。   可粗略估計一下,除了偶爾用Linux的外,其他Linu x使用者都會遇到正則表示式。正則表示式是個極端強大工具,而且在字串模式-匹配和字串模式-替換方面富有