正規表示式

2021-09-12 06:58:08 字數 2324 閱讀 2745

經常會有查詢符合某些複雜規則的字串的需要,這時我們就要使用正規表示式。

正規表示式分為元字元和普通字元。

表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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...