正則表達式

以前每次要用到正則表達式都會到處去找資料看看元字符、限定符有哪些苍糠,怎么去用叁丧。用的很不熟悉,于是特意花了一個晚上去好好學學岳瞭。寫這篇博客對學到知識做一個的總結(jié)拥娄,也給以后做個參考吧,畢竟如果不經(jīng)常用的話可能又會忘掉瞳筏。
正則在線測試工具

什么是正則表達式

正則表達式是用于進行文本匹配的工具条舔,就把正則表達式理解成一個字符串匹配規(guī)則,可以根據(jù)這個規(guī)則在文本中找到你想要的字符串部分乏矾。
接下來直接從元字符、字符轉(zhuǎn)義迁杨、重復(fù)钻心、字符類、反義铅协、分枝條件捷沸、分組、向后引用這些來做個小歸納狐史。

1 元字符(metacharacter)

元字符 說明
. 匹配除換行以外的任意字符
\d 匹配數(shù)字
\s 匹配空白符(空格符' '痒给、水平制表符'\t'说墨、垂直制表符'\v'、換行符'\n'苍柏、回車符'\r')
\w 匹配字母\數(shù)字\下劃線\漢字
\b 匹配單詞的開始或結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束

例子

  1. \bhongyu\w*\b 匹配以hongyu開頭的單詞尼斧。
  2. ^\d{5,12}$ 匹配一個含有5到12位數(shù)字的字符串。

2 字符轉(zhuǎn)義

當要匹配特殊字符本身時试吁,用\來取消特殊字符的特殊意義

字符 表示
. \.
* \*
\ \\
^ \^
$ \$

例子

  1. c:\\windows匹配c:\windows棺棵。
  2. hongdou \^ hongyu匹配hongdou ^ hongyu。

3 重復(fù)

代碼/語法 說明
* 重復(fù)零次或更多次
+ 重復(fù)一次或更多次
? 重復(fù)零次或一次
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n,m} 重復(fù)n到m次

例子

  1. hi \w+ 匹配以hi 開頭后面跟一個或多個字符的字符串熄捍。
  2. 134\d{8} 匹配以134開頭的11位數(shù)字的字符串烛恤。

4 字符類

  1. [aeiou] 匹配 任何一個元音字母 a,e,i,o,u
  2. [a-z0-9A-Z] 匹配任意一個a-z或0-9或A-Z的字符

5 反義

代碼/語法 說明
\W 匹配任意不是字母和數(shù)字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數(shù)字的字符
\B 匹配不是單詞開頭或結(jié)束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字符

6 分枝條件

就類似于或,比方說你想匹配兩種號碼的任意一種:一種是三位區(qū)號余耽,8位本地號(如010-12345678)缚柏,一種是4位區(qū)號,7位本地號(0376-2233445)碟贾”倚可以用 0\d{2}[- ]?\d{8}|0\d{3}[- ]?\d{7}
兩個條件用 | 隔開。使用分枝條件時缕陕,要注意各個條件的順序粱锐,如\d{5}|\d{5}-\d{4},那么就只會匹配5位的數(shù)字串(以及9位數(shù)字串的前5位)扛邑。原因是匹配分枝條件時怜浅,將會從左到右地測試每個條件,如果滿足了某個分枝的話蔬崩,就不會去再管其它的條件了恶座。

7 分組

前面提到的重復(fù)部分的例子都是針對于單個字符進行的,那么如果要重復(fù)多個字符時沥阳,就要用到分組了跨琳。

例子

  1. ((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?):
    ((2[0-4]\d|25[0-5]|[01]?\d\d?).)這個整體(分組)重復(fù)三次({3}),這是匹配一個IP地址桐罕。

8 向后引用

當使用一個小括號制定子表達式后脉让,匹配到的文本希望在后面能用于匹配 ,默認的情況下功炮,每個分組會自動有一個組號溅潜,組號從左到右,以分組的左括號為標志薪伏,第一個出現(xiàn)的為1滚澜,第二個為2,以此類推嫁怀。后面要用的某族匹配的文本時设捐,用\組名借浊,如\1代表分組1匹配的文本。

代碼/語法 說明
(exp) 匹配exp萝招,并捕獲文本到自動命名的組里(及將捕獲的文本內(nèi)容記錄下來
(?<name>exp) 匹配exp蚂斤,并捕獲文本到命名為name的組里(也可寫成?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文本即寒,也不給次分組分配組號

例子

  1. \b(\w+)\b\s+\1\b 匹配重復(fù)的單詞橡淆,如: ha ha, go go母赵。
  2. \b(?<Word>\w+)\b\s+\k<Word>\b逸爵。同1,這里自己定義了分組名Word

9 零寬斷言

像\b, ^ , $那樣用于指定一個位置凹嘲,這個位置要滿足何種條件(斷言)师倔,零寬斷言用于指定在某些內(nèi)容前面或者后面要滿足什么條件。零寬斷言有四種:零寬度正預(yù)測先行斷言(斷言位置的后面匹配表達式exp)周蹭、零寬度正回顧后發(fā)斷言(斷言位置的前面匹配表達式exp)趋艘、零寬度負預(yù)測先行斷言(斷言位置的后面不能匹配表達式exp)、零寬度負回顧后發(fā)斷言(斷言位置的前面不能匹配表達式exp)

代碼/語法 說明
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置

例子

  1. \b\w+(?=ing\b)凶朗,匹配以ing結(jié)尾的單詞的前面部分(除了ing以外的部分):I'm singing while you're dancing.時瓷胧,它會匹配sing和danc。
  2. (?<=\bre)\w+\b棚愤,匹配以re開頭的單詞的后半部分(除了re以外的部分):reading a book時搓萧,它會匹配ading。
  3. ((?<=\d)\d{3})+\b宛畦,用它對1234567890進行查找時結(jié)果是234567890瘸洛。
  4. \b\wq(?!u)\w\b ,包含后面不是字母u的字母q的單詞次和。
  5. (?<![a-z])\d{7}匹配前面不是小寫字母的七位數(shù)字反肋。
  6. (?<=<(\w+)>).*(?=</\1>)匹配不包含屬性的簡單HTML標簽內(nèi)里的內(nèi)容。

10 貪婪與懶惰

貪婪就是匹配盡可能多的字符踏施,懶惰就是匹配盡可能少的字符石蔗。例如對于字符串a(chǎn)babab,用a.b,將匹配到ababab畅形,這個就是 貪婪匹配抓督;用a.?,匹配到的就是ab束亏,這就是懶惰匹配。正則表達式通常的行為是進行貪婪匹配阵具,要將貪婪匹配轉(zhuǎn)換成懶惰匹配碍遍,只要在限定符后面加上問好?就行了定铜。以下是懶惰限定符

代碼/語法 說明
*? 重復(fù)任意次,但盡可能少重復(fù)
+? 重復(fù)1次或更多次怕敬,但盡可能少重復(fù)
?? 重復(fù)0次或1次揣炕,但盡可能少重復(fù)
{n,m}? 重復(fù)n到m次,但盡可能少重復(fù)
{n,}? 重復(fù)n次以上东跪,但盡可能少重復(fù)

11 處理選項

名稱 說明
IgnoreCase(忽略大小寫) 匹配時不區(qū)分大小寫畸陡。
Multiline(多行模式) 更改^和$的含義,使它們分別在任意一行的行首和行尾匹配虽填,而不僅僅在整個字符串的開頭和結(jié)尾匹配丁恭。(在此模式下,$的精確含意是:匹配\n之前的位置以及字符串結(jié)束前的位置.)
Singleline(單行模式) 更改.的含義,使它與每一個字符匹配(包括換行符\n)斋日。
IgnorePatternWhitespace(忽略空白) 忽略表達式中的非轉(zhuǎn)義空白并啟用由#標記的注釋牲览。
ExplicitCapture(顯式捕獲) 僅捕獲已被顯式命名的組。

需要注意的是多行模式和單行模式并不沖突恶守。

Java中使用正則表達式

  1. String的match方法
    判斷字符串s是否匹配正則表達式reg : s.match(reg)//匹配返回false第献,否則返回true.
  2. Pattern 類
import java.util.regex.*; 
class RegexExample1{
      public static void main(String args[]){
      String content = " hongdou " +
       "loves hongyu with all his heart and soul.";
      String pattern = "hongdou.*love.*hongyu"; 
      boolean isMatch = Pattern.matches(pattern, content);
      System.out.println("hondou loves hongyu : " + isMatch);
   }
} 
  1. Matcher 類
import java.util.regex.*; 
class RegexExample2{
      public static void main(String args[]){
      String content = " hongdou " +
       "loves hongyu with all his heart and soul.";
      String pattern = "\\b\\w+\\b"; //匹配單詞
      Matcher matcher= Pattern.compile(pattern).match(content);

      // 將所有符合正則表達式的子串打印
      while(matcher.find()) {
            System.out.println(matcher.group());
      }
   }
} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兔港,隨后出現(xiàn)的幾起案子庸毫,更是在濱河造成了極大的恐慌,老刑警劉巖衫樊,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飒赃,死亡現(xiàn)場離奇詭異,居然都是意外死亡橡伞,警方通過查閱死者的電腦和手機盒揉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兑徘,“玉大人刚盈,你說我怎么就攤上這事」夷裕” “怎么了藕漱?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崭闲。 經(jīng)常有香客問我肋联,道長,這世上最難降的妖魔是什么刁俭? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任橄仍,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侮繁。我一直安慰自己虑粥,他們只是感情好,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布宪哩。 她就那樣靜靜地躺著娩贷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锁孟。 梳的紋絲不亂的頭發(fā)上彬祖,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音品抽,去河邊找鬼储笑。 笑死,一個胖子當著我的面吹牛桑包,可吹牛的內(nèi)容都是我干的南蓬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼哑了,長吁一口氣:“原來是場噩夢啊……” “哼赘方!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弱左,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窄陡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拆火,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跳夭,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年们镜,在試婚紗的時候發(fā)現(xiàn)自己被綠了币叹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡模狭,死狀恐怖颈抚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嚼鹉,我是刑警寧澤贩汉,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站锚赤,受9級特大地震影響匹舞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜线脚,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一赐稽、第九天 我趴在偏房一處隱蔽的房頂上張望叫榕。 院中可真熱鬧,春花似錦又憨、人聲如沸翠霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至零如,卻和暖如春躏将,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背考蕾。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工祸憋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肖卧。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓蚯窥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塞帐。 傳聞我的和親對象是個殘疾皇子拦赠,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本文譯自 制作正則引擎的作者 Jan Goyvaerts 為工具 RegexBuddy 寫的教程版權(quán)歸原作者所有注...
    極客圈閱讀 3,292評論 0 25
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位葵姥,可能是字母荷鼠,數(shù)字,標點符號榔幸,空格允乐,換行符,漢字等...
    獅子挽歌閱讀 2,150評論 0 9
  • 原文:http://www.jb51.net/tools/zhengze.html 然后強迫癥如我削咆,因為我怕網(wǎng)頁哪...
    你再不來我要下雪了閱讀 838評論 1 6
  • 注:本篇文章只為方便查看牍疏,特此保留,如有冒犯拨齐,敬請諒解A墼伞!奏黑! 本文目標 30分鐘內(nèi)讓你明白正則表達式是什么炊邦,并對它...
    阿杰Alex閱讀 1,486評論 0 10
  • 1. 正則表達式 正則表達式,又稱正規(guī)表示式熟史、正規(guī)表示法馁害、正規(guī)表達式、規(guī)則表達式蹂匹、常規(guī)表示法(英語:Regular...
    xiangang閱讀 687評論 0 3