1. 程式人生 > >正則表達式的基本應用

正則表達式的基本應用

正則表達式

比如有三個單詞 hi nihi wohime 如果我們需要匹配到hi可以直接輸入hi 匹配, 但是我們註意到這樣匹配會把hi nihi wohime 三個單詞裏面的hi同事匹配到。(註意:這裏輸出為hi hi hi 三個hi).

如果我們只想要匹配到只含有hi的這個單詞,也就是h開頭i結尾中間沒有任何其他單詞。就需要使用\b: 用法\bhi\b (這裏表示配置h開頭i結尾中間沒有任何其他單詞的也就是hi這個單詞)

\b :一般成之為元字符,相當於一個占位符,匹配單詞的開頭和結尾.

如果我們想匹配hi並且他前面有兩個單詞這裏就會用到 . 。也是元字符,他表示:

匹配除了換行符以外的任意單個字符 經常和 *一起用* 也是一個元字符,他表示前面的內容可以匹配任意次。 .*就表示匹配任意字符任意次。

所以現在有 nihao ni nihaome ni hao

如果需要匹配nihaome就可以使用\bnihaome\b,或者ni.*me ni.*e

這裏需要註意的是:如果一行中有 nia zhuzai zhongguo ni hao zhongguo ni ai zhongguo這樣的幾個單詞,想要匹配ni xxxx zhongguo的話 就可以結合前面的知識使用 \bni\b.*\bzhongguo\b 或者\bni\b .* zhongguo這裏第二個需要註意原文中ni後面只有一個空格hao後面一個空格所以這裏最多也只能隔一個空格。


如果想要匹配0XX-XXXXXXX加入這裏表示電話號碼,也就是X只能代表數字。就要使用\d

\d 這裏的\d表示匹配任意一個數字(也就是0-9裏面的任意一個數字)

0\d\d-\d\d\d\d\d\d\d\d(註意這裏面有一個 - 這個 - 沒有任何其他意義只是代表本身,也就是在某個位置他要出現)

當然為了簡便寫法,我們這裏可以使用一個簡便寫法:0\d{2}-\d{7} 註意:這裏的{7}7代表包括前面的\d一共出現7次數字。

\w 匹配字母或數字或下劃線或漢字

比如:\ba\w*\b 表示a開頭的任意單詞,這裏需註意的是加入有 awd aww a12 這裏都會匹配到(*不是匹配\w匹配到的那個數字或者單詞或者下劃線任意次,他是指的是\w 這一類數據可以出現任意次)

\d+匹配1個或更多連續的數字。這裏的+是和*類似的元字符,不同的是*匹配重復任意次(可能是0次),而+則匹配重復1次或更多次

\b\w{6}\b 匹配剛好6個字符的單詞。wdf_46 ______ 123456 qwerty 都可以被匹配

\s 匹配任意的空白符

^ $

元字符^(和數字6在同一個鍵位上的符號)和$都匹配一個位置,這和\b有點類似。^匹配你要用來查找的字符串的開頭,$匹配結尾。這兩個代碼在驗證輸入的內容時非常有用,比如一個網站如果要求你填寫的QQ號必須為5位到12位數字時,可以使用:^\d{5,12}$這裏需要註意在某些主機是不支持這種用法,需要使用perl的正則引擎比如linux的grep就需要加上-P才能正常是使用 egrep -P "^\d{5,12}$" /tmp/1

註意 如果在使用過程中需要使用元字符本身比如 as\sd 就需要在元字符前面再加一個\ as\\sd


常用的重復方式


*重復零次或更多次
+重復一次或更多次
?重復零次或一次
{n}重復n次
{n,}重復n次或更多次
{n,m}重復n到m次


^\w+:這裏需要註意的是+匹配的是前面的類型!!!!!


[]:用法匹配[]裏面給出的任意一個!比如: abb a8b ab8h a[b8h]b 只能匹配到 abb a8b 他只能匹配裏面給的一個,如果多個都出現了就無法匹配.

理解 :\(?0\d{2}[) -]?\d{8} :提醒"(" 是元字符。


\d{5}-\d{4}|\d{5}這個表達式用於匹配美國的郵政編碼。美國郵編的規則是5位數字,或者用連字號間隔的9位數字。之所以要給出這個例子是因為它能說明一個問題:使用分枝條件時,要註意各個條件的順序。如果你把它改成\d{5}|\d{5}-\d{4}的話,那麽就只會匹配5位的郵編(以及9位郵編的前5位)。原因是匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。 這裏需要特別註意的是如果你輸入一個 23827-easasd123 匹配的結果是23827 之前我理解的是會匹配到26827- 這裏應該這樣理解 (\d{5}-\d{4})|(\d{5}) 這裏的"|&quo

正則表達式的基本應用