經常會有查詢符合某些複雜規則的字串的需要,這時我們就要使用正規表示式。
正規表示式分為元字元和普通字元。
表1.常用的元字元
** 說明
. 匹配除換行符以外的任意字元
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字串的開始
$ 匹配字串的結束
一般元字元後面接上表示次數的符號,表示元字元代表的出現的次數。例如*,+,,.。。。至少5次最多12次
這裡的+是和*類似的元字元,不同的是*匹配任意次(可能是0次),而+則匹配1次或更多次
表2.常用的限定符
**/語法 說明
* 零次或更多次
+ 一次或更多次
? 零次或一次
n次n次或更多次
n到m次
舉個例子
\w 匹配連續6個字母或數字或下劃線或漢字
\ba\w*\b匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然後是字母a,然後是任意數量的字母或數字(\w*),最後是單詞結束處(\b)。
\w* 匹配至少0個的字母或數字或下劃線或漢字,所以一般沒有單獨這麼寫。可以a\w* ,以a開頭的字串或a
\d+ 匹配至少1個數字
scala> val regex="""\d+""".r
regex: scala.util.matching.regex = \d+
scala> val s="a334 23ff 1dddd"
s: string = a334 23ff 1dddd
scala> val m=regex.findallin(s)
m: scala.util.matching.regex.matchiterator = non-empty iterator
scala> m.toarray
res5: array[string] = array(334, 23, 1)
^\d$因為使用了^和$,所以輸入的整個字串都要用來和\d來匹配,也就是說整個輸入必須是5到12個數字,因此如果輸入的qq號能匹配這個正規表示式的話,那就符合要求了。
scala> val regex="""\ba\w\b""".r
regex: scala.util.matching.regex = \ba\w\b
scala> val s="ass alll ad"
s: string = ass alll ad
scala> val m=regex.findallin(s)
m: scala.util.matching.regex.matchiterator = non-empty iterator
scala> m.toarray
res2: array[string] = array(ass)
字元轉義
如果你想查詢元字元本身的話,比如你查詢.,或者*,就出現了問題:你沒辦法指定它們,因為它們會被解釋成別的意思。這時你就得使用\來取消這些字元的特殊意義。因此,你應該使用\.和\*。當然,要查詢\本身,你也得用\\.
例如:deerchao\.net匹配deerchao.net,c:\\windows匹配c:\windows。
指定區間段
如果你想匹配沒有預定義元字元的字元集合(比如母音字母a,e,i,o,u),應該怎麼辦?
很簡單,你只需要在方括號裡列出它們就行了,像[aeiou]就匹配任何乙個英文母音字母,[.?!]匹配標點符號(.或?或!)。
我們也可以輕鬆地指定乙個字元範圍,像[0-9]代表的含意與\d就是完全一致的:一位數字;同理[a-z0-9a-z_]也完全等同於\w(如果只考慮英文的話)。
分支條件
當你使用正規表示式表示滿足其中之一即可,用 | 連線兩個正則
a | b 匹配分枝條件時,將會從左到右地測試每個條件,所以注意順序
分組只要將你的正規表示式用()括起來就是一組(\d\.) 數字一到3個加上 . 這種情形共有3次,舉例 344.2.12就符合
反義有時需要查詢不屬於某個能簡單定義的字元類的字元。比如想查詢除了數字以外,其它任意字元都行的情況,這時需要用到反義:
表3.常用的反義**
**/語法
說明\w 匹配任意不是字母,數字,下劃線,漢字的字元
\s 匹配任意不是空白符的字元
\d 匹配任意非數字的字元
\b 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字元
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字元
例子:\s+匹配不包含空白符的字串。
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...