正則表達式

.正則表達式

[]spa

^code

$對象

四個字符是全部語言都支持的正則表達式,因此這個四個是基礎的正則表達式。正則難理解由於裏面有一個等價的概念,這個概念大大增長了理解難度,讓不少初學者看起來會蒙,若是把等價都恢復成原始寫法,本身書寫正則就超級簡單了,就像說話同樣去寫你的正則了:ci


等價:字符串

等價是等同於的意思,表示一樣的功能,用不一樣符號來書寫。table

?,*,+,\d,\w 都是等價字符基礎

  ?等價於匹配長度{0,1}
  *等價於匹配長度{0,} 
  +等價於匹配長度{1,}
   \d等價於[0-9]
   \D等價於[^0-9]
   \w等價於[A-Za-z_0-9]
   \W等價於[^A-Za-z_0-9]。
   \b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」能夠匹配「never」中的「er」,但不能匹配「verb」中的「er」。
   \B匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。
   \s匹配任何不可見字符,包括空格、製表符、換頁符等等。等價於[ \f\n\r\t\v]。
   \S匹配任何可見字符。等價於[^ \f\n\r\t\v]。

經常使用運算符與表達式:語法

^ 開始
  () 域段
  [] 包含,默認是一個字符長度
  [^] 不包含,默認是一個字符長度
  {n,m} 匹配長度 
  . 任何單個字符(除去\r\n,要匹配包括\r\n之內的如何字符請使用[\s\S])
  | 或
  \ 轉義
  $ 結尾
  [A-Z] 26個大寫字母
  [a-z] 26個小寫字母
  [0-9] 0至9數字
   [A-Za-z0-9] 26個大寫字母、26個小寫字母和0至9數字
  , 分割

 

分類 代碼/語法 說明
捕獲 (exp) 匹配exp,並捕獲文本到自動命名的組裏
(?<name>exp) 匹配exp,並捕獲文本到名稱爲name的組裏,也能夠寫成(?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號
零寬斷言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp後面的位置
(?!exp) 匹配後面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
註釋 (?#comment) 這種類型的分組不對正則表達式的處理產生任何影響,用於提供註釋讓人閱讀

 

Java代碼示例: 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.pattern();//返回p 也就是返回該Matcher對象是由哪一個Pattern對象的建立的 

Matcher.matches()/ Matcher.lookingAt()/ Matcher.find() 方法

Matcher類提供三個匹配操做方法,三個方法均返回boolean類型,當匹配到時返回true,沒匹配到則返回false 
matches()對整個字符串進行匹配,只有整個字符串都匹配了才返回true 

Java代碼示例: 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.matches();//返回false,由於bb不能被\d+匹配,致使整個字符串匹配未成功. 
Matcher m2=p.matcher("2223"); 
m2.matches();//返回true,由於\d+匹配到了整個字符串

lookingAt()對前面的字符串進行匹配,只有匹配到的字符串在最前面才返回true 

Java代碼示例: 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.lookingAt();//返回true,由於\d+匹配到了前面的22 
Matcher m2=p.matcher("aa2223"); 
m2.lookingAt();//返回false,由於\d+不能匹配前面的aa

find()對字符串進行匹配,匹配到的字符串能夠在任何位置. 

Java代碼示例: 
Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 
m.find();//返回true 
Matcher m2=p.matcher("aa2223"); 
m2.find();//返回true 
Matcher m3=p.matcher("aa2223bb"); 
m3.find();//返回true 
Matcher m4=p.matcher("aabb"); 
m4.find();//返回false
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息