正規表示式

2021-06-22 23:01:59 字數 4758 閱讀 6117

正規表示式(regular expression)是用乙個「字串」來描述乙個特徵,然後去

驗證另乙個「字串」是否符合這個特徵。

比如,表示式「ab+

」描述的特徵是乙個』a』和任意多個』b』,則』ab』,』abb』,』abbbbbbbbbb』都符合這個特徵。

表示式可用來:

(1)驗證字串是否符合指定特徵,如驗證是否是合法的郵件位址。

(2)用來

查詢字串,從乙個長的文字中查詢符合指定特徵的字串,比查詢固定字串更加靈活方便。

(3)用來

替換,比普通的替換更加強大。

1.普通字元

字母、數字、漢字、下劃線、沒有特殊定義的標點符號,都是「普通字元」。表示式中的普通字元,在匹配乙個字串時,匹配與之相同的乙個字元。

如:1.表示式「

c」,在匹配字串「

abcde

」時,匹配結果是:成功;匹配到的內容是「

c」;匹配到的位置是:開始於

2,結束於3。

注:下標從0

開始還是從

1開始,可能因當前的程式語言不同而不同。

2.表示式「bcd

」,在匹配字串「

abcde

」時,匹配結果是:成功;匹配到的內容是:「

bcd」;匹配到的位置是:開始於

1,結束於4。

2.簡單的轉義字元

一些不便書寫的字元,採用在前面加「\

」的方法。

表示式可匹配

\r,\n

代表enter

和換行符 \t

製表符代表「\

」本身

有特殊用處的標點符號,在前面加「\

」後,就代表該符號本身。比如:^,

$都有特殊意義,若要想匹配字串中「

^」和「

$」字元,則表示式就需寫成「

\^」和「

\$」。

表示式可匹配

匹配^符號本身

匹配$符號本身 

匹配小數點(.)本身

這些轉義字元的匹配方法與「普通字元」類似。也是匹配與之相同的乙個字元。

3.能夠與『多種字元』匹配的表示式

可匹配『多種字元』其中的任意乙個字元。比如,表示式「\d

」可匹配任意乙個數字。雖可匹配其中任意字元,但只能是乙個,不是多個。

表示式可匹配\d

任意乙個數字,0~9

中的任意乙個 \w

任意乙個字母或數字或下劃線,也就是a~z,a~z

,0~9,_

中任意乙個 \s

包括空格、製表符、換頁符等空白字元的其中任意乙個

小數點可匹配除了換行符(\n)

以外的任意乙個字元

例:1.表示式「\d\d」,在匹配「abc123

」時,匹配的結果:成功;匹配到的內容:「

12」;匹配到的位置:開始於3

,結束於5。

2.表示式「a.\d」,在匹配「aaa100

」時,匹配的結果:成功;匹配到的內容:「

aa1」;匹配到的位置:開始於1

,結束於4。

4.自定義能夠匹配『多種字元』的表示式

使用方括號[ ]

包含一系列字元,能匹配其中任意乙個字元。用

[^]包含一系列字元,則能匹配其中字元之外的任意乙個字元。注意:可以匹配其中任意乙個,但只能是乙個,不是多個。

表示式可匹配[ab5@]

匹配「a

」或「b

」或「5

」或「@」

[^abc]

匹配「a

」,「b

」,「c

」之外的任意乙個字元

[f-k]

匹配「f」~

「k」之間的任意乙個字母

[^a-f0~3]

匹配「a」~

「f」,「0」~

「3」之外的任意乙個字元

例:1.表示式「

[bcd][bcd]

」匹配「

abc123

」時,匹配的結果:成功;匹配到的內容:「

bc」;匹配到的位置:開始於1

,結束於3。

2.表示式「[^abc]

」匹配「

abc123

」時,匹配的結果:成功;匹配到的內容:「

1」;匹配到的位置:開始於3

,結束於4。

5.修飾匹配次數的特殊符號

想要使用表示式再加上修飾匹配次數的特殊符號,則用重複書寫表示式就可重複匹配。

方法:「次數修飾」放在「被修飾的表示式」後邊。

比如:「[bcd][bcd]

」可寫成「

[bcd]」

表示式作用

表示式重複n

次,如:「

\w」相當於「

\w\w

」;「a

」相當於「

aaaaa」

表示式至少重複m

次,最多重複

n次,如:「

ba」可匹配「

ba」或「

baa」或「

baaa」

表示式至少重複m

次,如:「

\w\d

」可匹配「

a12」,「

_456

」,「m12344」…

匹配表示式0次或1

次,相當於

,如:「

a[cd]?

」可匹配「

a」,「

ac」,「ad」

表示式至少出現1

次,相當於

,如:「

a+b」可匹配,「

ab」,「

aab」,「

aaab」…

表示式不出現或出現任意次,相當於

,如:「

\^*b

」可匹配「

b」,「

^^^b」…

例:1.表示式「\d+\.?\d*

」在匹配「

it costs $12.5

」時,匹配的結果是:成功;匹配到的內容是:「

12.5

」;匹配到的位置是:開始於10

,結束於14。

2.表示式「gogle

」在匹配「

ads by goooooogle

」時,匹配的結果是:成功;匹配到的內容是:「

goooooogle

」;匹配到的位置是:開始於7

,結束於17。

6.其他一些代表抽象意義的特殊符號

表示式作用   ^

與字串開始的地方匹配,不匹配任何字元

$與字串結束的地方匹配,不匹配任何字元

\b匹配乙個單詞邊界,也就是單詞和空格之間的位置,不匹配任何字元

例:1.表示式「^aaa

」在匹配「

*** aaa ***

」時,匹配的結果是:失敗;因為「

^」要求與字串開始的地方匹配,因此,只有當「

aaa」位於字串的開頭時,「

^aaa

」才能匹配,比如:「

aaa *** ***」。

2.2.表示式「

aaa$

」在匹配「

*** aaa ***

」時,匹配的結果是:失敗;因為「

$」要求與字串開始的地方匹配,因此,只有當「

aaa」位於字串的結尾時,「

aaa$

」才能匹配,比如:「

*** *** aaa」。

3.表示式「.\b.

」在匹配「

@@@abc

」時,匹配的結果是:成功;匹配到的內容是:「

@a」;匹配到的位置是:開始於2

,結束於4。

進一步說明:「\b

」與「^

」和「$

」類似,本身不匹配任何字元,但它要求在匹配結果中所處位置的左右

2邊,其中一邊是「

\w」範圍,另一邊是非「

\w」的範圍。

4.表示式「\bend\b

」在匹配「

weekend,endfor,end

」時,匹配的結果是:成功;匹配到的內容是:「

end」;匹配到的位置是:開始於15

,結束於18。

一些符號可影響表示式內部的子表示式之間的關係。

表示式作用

左右兩邊表示式之間「或」關係,匹配左邊或右邊

(1)在被修飾匹配次數的時候,括號中的表示式可作為整體被修飾

(2)取匹配結果的時候,括號中的表示式匹配到的內容可被單獨得到

例:1.表示式「

tom|jack

」在匹配字串「

i』m tom,

he is jack

」時,匹配的結果是:成功;匹配到的內容是:「tom

」;匹配到的位置是:開始於4

,結束於

7。匹配下乙個時,匹配的結果是:成功;匹配到的內容是:「jack」;匹配到的位置是:開始於15

,結束於19。

2.表示式「(go\s*)+

」在匹配「

let』s go go go!」時,匹配的結果是:成功;匹配到的內容是:「go go go

」;匹配到的位置是:開始於6

,結束於14。

3.表示式「¥

(\d+\.?\d*)

」在匹配「

$10.9

,¥20.5

」時,匹配的結果是:成功;匹配到的內容是:「¥20.5」;匹配到的位置是:開始於6

,結束於

10。單獨獲取括號範圍匹配到的內容是:「

20.5」。

正規表示式 正規表示式 總結

非負整數 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正規表示式 編寫正規表示式

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