摘要:編號默認代表整個表達式。小數可有可無,但最多位文件中文字符的正則表達式雙字節字符空白行的正則表達式標記的正則表達式首尾空白字符的正則表達式或騰訊號中國郵政編碼地址地址
正則表達式簡析
所謂正則表達式,就是用一個特定的表達式完成字符串匹配的工作,我們可以規定什么字符以什么方式出現,出現多少次,前后需要有什么,然后提取出符合這個要求的字符串或者判斷某個字符串是否符合這個要求。
元字符代碼/語法 | 說明 |
---|---|
. | 匹配除換行符以外的任意字符 |
w | 匹配字母或數字或下劃線或漢字 |
s | 匹配任意的空白符 |
d | 匹配數字 |
b | 匹配單詞的開始或結束 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結束 |
一下是上面部分字符的反義
代碼/語法 | 說明 |
---|---|
W | 匹配任意不是字母,數字,下劃線,漢字的字符 |
S | 匹配任意不是空白符的字符 |
D | 匹配任意非數字的字符 |
B | 匹配不是單詞開頭或結束的位置 |
還有一組具有反義的表達式:
代碼/語法 | 說明 |
---|---|
[aeiou] | 匹配aeiou中任一字符 |
1 | 匹配除了aeiou這幾個字母以外的任意字符 |
代碼/語法 | 說明 |
---|---|
a | 響鈴 |
t | 制表符 |
r | 回車符 |
n | 換行符 |
f | 換頁符 |
b | 退格 |
e | ESC |
v | 垂直制表符 |
cC | 控制字符(如ctrl+c) |
040 | 八進制(0開頭) |
x20 | 十六進制(x開頭) |
uA0FF | Unicode字符 |
G | 當前搜索的開頭 |
A | 必須出現在字符串開頭 |
Z | 必須實現在字符串結尾或 之前 |
z | 必須實現在字符串結尾 |
注1 | 在[]中,正則表達式中有含義的字符都要再前方加轉義。如寫作 |
注2 | b在[]中才表示退格,在外面表示單詞邊界 |
注3 | 正則表達式不允許雙引號中出現單引號 |
注意換行的回車不是一個東西,雖然我們看上去是一樣的。這個和編碼發展歷史有關,區別見下表:
Unicode序列 | 正則 | 名稱 | 簡寫 | 描述 |
---|---|---|---|---|
U+000DU+000A | (rn) | 回車換行 | CRLF | Windows,DOS中的文本文件 |
U+000D | (r) | 回車 | CR | 舊版的MacOS中的文本文件 |
U+000A | (n) | 換行 | LF | Unix,Linux,BSD和OSx中的文本文件 |
代碼/語法 | 說明 |
---|---|
* | 重復零次或更多次 |
+ | 重復一次或更多次 |
? | 重復零次或一次 |
{n} | 重復n次 |
{n,} | 重復n次或更多次 |
{n,m} | 重復n到m次 |
代碼/語法 | 說明 |
---|---|
*? | 重復任意次,但盡可能少重復 |
+? | 重復1次或更多次,但盡可能少重復 |
?? | 重復0次或1次,但盡可能少重復 |
{n,m}? | 重復n到m次,但盡可能少重復 |
{n,}? | 重復n次以上,但盡可能少重復 |
我們已經提到了怎么重復單個字符,但如果想要重復多個字符又該怎么辦?你可以用小括號來指定子表達式(也叫做分組),然后你就可以指定這個子表達式的重復次數了。 比如
(?#這一行是個注釋,注釋這樣寫) ^abc{2,} (?#匹配ab開頭后面2個及以上c) ^a(bc){2,} (?#匹配a開頭后面2個及以上bc)
每一個()中的變量都會被分配一個編號((?:exp)除外),按()出現順序,從左到右,從外到內編號,從1開始。編號0默認代表整個表達式。可以利用+ 編號的形式訪問對應編號的匹配。例如:
<([^>]*)>[^<>]*1> (?#匹配一對不含子標簽的xml標簽及里面的內容)
在.Net中,可以用(?
當然還有一些有意義的括號,除了(?:exp)以外,都會帶有編號。下面是完整的分組說明:
代碼/語法 | 說明 |
---|---|
(exp) | 普通分組 |
(? |
名為name的分組 |
(?:exp) | 匹配字符串exp,但不為其分配組號 |
何為斷言:斷言某個位置會出現,或不會出現某個模式,但不去匹配這個模式。當斷言不成功時,不再匹配。
代碼/語法 | 說明 |
---|---|
(?=exp) | 匹配字符串exp前面的位置 |
(?<=exp) | 匹配字符串exp后面的位置 |
(?!exp) | 匹配后面不是字符串exp的位置 |
(? | 匹配前面不是字符串exp的位置 |
(?>exp) | 只匹配exp一次 |
代碼/語法 | 說明 | |
---|---|---|
邏輯或 |
這個和上面的分組命名不矛盾,這個就是那個部分的擴展。
代碼/語法 | 說明 | |
---|---|---|
(? |
把匹配的內容命名為name,入棧 | |
(?<-name>exp") | 從棧中彈出一個內容 | |
(?(name) yes | no) | 如果棧中存在名為name的內容就匹配yes部分,否則匹配no部分,這里yes和no分別是2段表達式 |
從上到下從高到低,同一高度順序運算
優先級 | ||
---|---|---|
轉義字符 | ||
() , [] | ||
* , + , ? , {n}, {n, } , {n, m} | ||
^ , $ , 元字符 | ||
數字:^[0-9]*$
n位的數字:^d{n}$
至少n位的數字:^d{n,}$
m-n位的數字:^d{m,n}$
零和非零開頭的數字:^(0|[1-9][0-9]*)$
非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
帶1-2位小數的正數或負數:^(-)?d+(.d{1,2})?$
正數、負數、和小數:^(-|+)?d+(.d+)?$
有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
非零的正整數:^[1-9]d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^+?[1-9][0-9]*$
非零的負整數:^-[1-9][]0-9″*$ 或 ^-[1-9]d*$
非負整數:^d+$ 或 ^[1-9]d*|0$
非正整數:^-[1-9]d*|0$ 或 ^((-d+)|(0+))$
非負浮點數:^d+(.d+)?$ 或 ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
非正浮點數:^((-d+(.d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
正浮點數:^[1-9]d*.d*|0.d*[1-9]d*$ 或 ^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$
負浮點數:^-([1-9]d*.d*|0.d*[1-9]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+)?$ 或 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$
驗證字串類型輸入漢字:^[u4e00-u9fa5]+$
英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
長度為3-20的所有字符:^.{3,20}$
由26個英文字母組成的字符串:^[A-Za-z]+$
由26個大寫英文字母組成的字符串:^[A-Z]+$
由26個小寫英文字母組成的字符串:^[a-z]+$
由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
由數字、26個英文字母或者下劃線組成的字符串:^w+$ 或 ^w{3,20}$
中文、英文、數字包括下劃線:^[u4E00-u9FA5A-Za-z0-9_]+$
中文、英文、數字但不包括下劃線等符號:^[u4E00-u9FA5A-Za-z0-9]+$ 或 ^[u4E00-u9FA5A-Za-z0-9]{2,20}$
可以輸入含有^%&’,;=?$”等字符:[^%&",;=?$x22]+
禁止輸入含有~的字符:[^~x22]+
驗證特殊類型輸入Email地址:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
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{8}$
電話號碼(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^($$d{3,4}-)|d{3.4}-)?d{7,8}$
國內電話號碼(0511-4405222、021-87888822):d{3}-d{8}|d{4}-d{7}
身份證號(15位、18位數字):^d{15}|d{18}$
短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$ 或 ^d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]w{5,17}$
強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間):^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
日期格式:^d{4}-d{1,2}-d{1,2}
一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
錢的輸入格式:1到3個數字,后面跟著任意個逗號+3個數字,逗號成為可選,而不是必須。小數可有可無,但最多2位:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+.[x|X][m|M][l|L]$
中文字符的正則表達式:[u4e00-u9fa5]
雙字節字符:[^x00-xff]
空白行的正則表達式: s*
HTML標記的正則表達式:<(S*?)[^>]*>.*?1>|<.*? />
首尾空白字符的正則表達式:^s*|s*$或(^s*)|(s*$)
騰訊QQ號:[1-9][0-9]{4,}
中國郵政編碼:[1-9]d{5}(?!d)
IPv4地址:d+.d+.d+.d+
IPv4地址:((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97593.html
摘要:正則表達式的字符串表示,按照字面量形式而非傳入構造函數中的字符串模式返回。其中,表示匹配項在字符串中的位置,而表示應用正則表達式的字符串。下面列出了正則表達式所不支持的特性。關卡按要求完成下列常用的正則表達式。 由于本課程的核心是 JavaScript,所以本文著重講解了「正則表達式」在 JavaScript 中的用法,并未深入「正則表達式」的具體細節。如果您尚不了解「正則表達式」,強...
摘要:目錄導語理解正則表達式模式的規則字符串和正則實例的屬性和方法檢索實例小結導語正則表達式是處理字符串的一門藝術手法,應用場景經常出現在表單驗證部分高級程序設計一書開篇提到,這門語言最原始的應用就是處理輸入驗證操作,所以正則表達式從誕生那一刻就 目錄 導語 1.理解正則表達式 2.模式的規則 3.字符串和正則實例的屬性和方法 4.檢索實例 5. 小結 導語 正則表達式是處理字符串的一門藝...
摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...
摘要:正則表達式是由普通字符例如字符到以及特殊字符稱為元字符組成的文字模式。方法參數一個正則表達式對象。如果正則表達式沒有標志,則會返回和相同的結果。其被視為一整個字符串,而不是一個正則表達式。 正則表達式 正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為元字符)。正則表達式使用單個字符串來描述、匹配一系列匹配某個...
摘要:對象表示正則表達式,它是對字符串執行模式匹配的強大工具。方法也可用于改變和重新編譯正則表達式。在下面的這個示例中,定義正則表達式直接量,用來匹配字符串中每個字符。 RegExp對象表示正則表達式,它是對字符串執行模式匹配的強大工具。RegExp對象用于規定在文本中檢索的內容。 創建RegExp對象有兩種方式:1.直接量語法:/pattern/attributes示例:var patt1...
閱讀 5222·2021-10-15 09:42
閱讀 1613·2021-09-22 16:05
閱讀 3272·2021-09-22 15:57
閱讀 3407·2019-12-27 12:06
閱讀 971·2019-08-29 15:16
閱讀 2884·2019-08-26 12:24
閱讀 387·2019-08-26 12:02
閱讀 1890·2019-08-23 16:00