正規表示式

2021-08-20 03:27:13 字數 2530 閱讀 7079

正規表示式(regular expression)描述了一種字串匹配的模式(pattern),可以用來檢查乙個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

例如:構造正規表示式的方法和建立數學表示式的方法一樣。也就是用多種元字元與運算子可以將小的表示式結合在一起來建立更大的表示式。正規表示式的元件可以是單個的字元、字元集合、字元範圍、字元間的選擇或者所有這些元件的任意組合。

正規表示式是由普通字元(例如字元 a 到 z)以及特殊字元(稱為"元字元")組成的文字模式。模式描述在搜尋文字時要匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。

所謂特殊字元,就是一些有特殊含義的字元,如上面說的 runoo*b 中的 *,簡單的說就是表示任何字串的意思。如果要查詢字串中的 * 符號,則需要對 * 進行轉義,即在其前加乙個 \: runo\*ob 匹配 runo*ob。

許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字元,必須首先使字元"轉義",即,將反斜槓字元\ 放在它們前面。下表列出了正規表示式中的特殊字元:

特別字元描述$

匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字元本身,請使用 \$。

( )標記乙個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 \( 和 \)。

*匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 \*。

+匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 \+。

.匹配除換行符 \n 之外的任何單字元。要匹配 . ,請使用 \. 。

[標記乙個中括號表示式的開始。要匹配 [,請使用 \[。

?匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。要匹配 ? 字元,請使用 \?。

\將下乙個字元標記為或特殊字元、或原義字元、或向後引用、或八進位制轉義符。例如, 'n' 匹配字元 'n'。'\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("。

^匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 \^。

或  或  共6種。

正規表示式的限定符有:

字元描述

*匹配前面的子表示式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價於。

+匹配前面的子表示式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 。

?匹配前面的子表示式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等價於 。

n 是乙個非負整數。匹配確定的 n 次。例如,'o' 不能匹配 "bob" 中的 'o',但是能匹配 "food" 中的兩個 o。

n 是乙個非負整數。至少匹配n 次。例如,'o' 不能匹配 "bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o' 等價於 'o+'。'o' 則等價於 'o*'。

m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o" 將匹配 "fooooood" 中的前三個 o。'o' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。

這裡是幾個主要非英文語系字元範圍

2e80~33ffh:中日韓符號區。收容康熙字典部首、中日韓輔助部首、注音符號、日本假名、韓文音符,中日韓的符號、標點、帶圈或帶括符文數字、月份,以及日本的假名組合、單位、年號、月份、日期、時間等。

3400~4dffh:中日韓認同表意文字擴充a區,總計收容6,582個中日韓漢字。

4e00~9fffh:中日韓認同表意文字區,總計收容20,902個中日韓漢字。

a000~a4ffh:彝族文字區,收容中國南方彝族文字和字根。

ac00~d7ffh:韓文拼音組合字區,收容以韓文音符拼成的文字。

f900~faffh:中日韓相容表意文字區,總計收容302個中日韓漢字。

fb00~fffdh:文字表現形式區,收容組合拉丁文本、希伯來文、阿拉伯文、中日韓直式標點、小符號、半形符號、全形符號等。

比如需要匹配所有中日韓非符號字元,那麼正規表示式應該是^[\u3400-\u9fff]+$ 

理論上沒錯, 可是我到msn.co.ko隨便複製了個韓文下來, 發現根本不對, 詭異 

再到msn.co.jp複製了個'お', 也不得行..

然後把範圍擴大到^[\u2e80-\u9fff]+$, 這樣倒是都通過了, 這個應該就是匹配中日韓文字的正規表示式了, 包括我們台灣省還在盲目使用的正體中文

而關於中文的正規表示式, 應該是^[\u4e00-\u9fff]+$, 和論壇裡常被人提起的^[\u4e00-\u9fa5]+$很接近

需要注意的是論壇裡說的^[\u4e00-\u9fa5]+$這是專門用於匹配簡體中文的正規表示式, 實際上繁體字也在裡面, 我用測試器測試了下'中華人民共和國', 也通過了, 當然, ^[\u4e00-\u9fff]+$也是一樣的結果

字元需大寫,不能隨意

([a-z]|[a-z]|[0-9]|-|_)

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

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

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