国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

正則表達(dá)式使用匯總

這篇具有很好參考價(jià)值的文章主要介紹了正則表達(dá)式使用匯總。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

正則表達(dá)式是由一些具有特殊含義的字符組成的字符串,多用于查找、替換符合規(guī)則的字符串。在表單驗(yàn)證、Url映射等處都會(huì)經(jīng)常用到。

平時(shí)可以使用正則表達(dá)式的在線測試工具練習(xí)和測試:正則表達(dá)式在線工具

【一】簡介

【1】通過 ? 和 * 的匹配認(rèn)識正則表達(dá)式

您很可能使用 ? 和 \* 通配符來查找硬盤上的文件。
\? 通配符匹配文件名中的 0 個(gè)或 1 個(gè)字符
而 * 通配符匹配零個(gè)或多個(gè)字符。
像 data(\w)?\.dat 這樣的模式將查找下列文件:

data.dat
data1.dat
data2.dat
datax.dat
dataN.dat
使用 * 字符代替 ? 字符擴(kuò)大了找到的文件的數(shù)量。
data.*\.dat 匹配下列所有文件:

data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat

【2】一個(gè)簡單的實(shí)例

正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

(1)^ 為匹配輸入字符串的開始位置。
(2)[0-9]+匹配多個(gè)數(shù)字, [0-9] 匹配單個(gè)數(shù)字,+ 匹配一個(gè)或者多個(gè)。
(3)abc$匹配字母 abc 并以 abc 結(jié)尾,$ 為匹配輸入字符串的結(jié)束位置。

【3】填寫用戶注冊表單時(shí)的規(guī)則設(shè)定

我們在寫用戶注冊表單時(shí),只允許用戶名包含字符、數(shù)字、下劃線和連接字符 -,并設(shè)置用戶名的長度,我們就可以使用以下正則表達(dá)式來設(shè)定。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql
以上的正則表達(dá)式可以匹配 runoob、runoob1、run-oob、run_oob, 但不匹配 ru,因?yàn)樗淖帜柑塘?,小?3 個(gè)無法匹配。也不匹配 runoob$, 因?yàn)樗厥庾址?/p>

【4】正則表達(dá)式的模式

正則表達(dá)式的模式可以包括以下內(nèi)容:

(1)字面值字符:例如字母、數(shù)字、空格等,可以直接匹配它們自身。
(2)特殊字符:例如點(diǎn)號 .、星號 *、加號 +、問號 ? 等,它們具有特殊的含義和功能。
(3)特殊字符:例如點(diǎn)號 .、星號 *、加號 +、問號 ? 等,它們具有特殊的含義和功能。
(4)元字符:例如 \d、\w、\s 等,用于匹配特定類型的字符,如數(shù)字、字母、空白字符等。
(5)量詞:例如 {n}{n,}、{n,m} 等,用于指定匹配的次數(shù)或范圍。
(6)邊界符號:例如 ^、$、\b、\B 等,用于匹配字符串的開頭、結(jié)尾或單詞邊界位置。

【二】語法

【1】普通字符

普通字符包括沒有顯式指定為元字符的所有可打印和不可打印字符。這包括所有大寫和小寫字母、所有數(shù)字、所有標(biāo)點(diǎn)符號和一些其他符號。

(1)[ABC]

匹配 […] 中的所有字符,例如 [aeiou] 匹配字符串 “google runoob taobao” 中所有的 e o u a 字母。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

(2)[^ABC]

匹配除了 […] 中字符的所有字符,例如 [^aeiou] 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字符。

(3)[A-Z]

[A-Z] 表示一個(gè)區(qū)間,匹配所有大寫字母,[a-z] 表示所有小寫字母。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

(4).

匹配除換行符(\n、\r)之外的任何單個(gè)字符,相等于 [^\n\r]。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

(5)[\s\S]

匹配所有。\s 是匹配所有空白符,包括換行,\S 非空白符,不包括換行。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

(6)\w

匹配字母、數(shù)字、下劃線。等價(jià)于 [A-Za-z0-9_]
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

【2】非打印字符

非打印字符也可以是正則表達(dá)式的組成部分。下表列出了表示非打印字符的轉(zhuǎn)義序列:

(1)\cx	匹配由x指明的控制字符。例如, \cM 匹配一個(gè) Control-M 或回車符。x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個(gè)原義的 'c' 字符。
(2)\f	匹配一個(gè)換頁符。等價(jià)于 \x0c 和 \cL。
(3)\n	匹配一個(gè)換行符。等價(jià)于 \x0a 和 \cJ。
(4)\r	匹配一個(gè)回車符。等價(jià)于 \x0d 和 \cM。
(5)\s	匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于 [ 
(6)\f\n\r\t\v]。注意 Unicode 正則表達(dá)式會(huì)匹配全角空格符。
(7)\S	匹配任何非空白字符。等價(jià)于 [^ \f\n\r\t\v]。
(8)\t	匹配一個(gè)制表符。等價(jià)于 \x09 和 \cI。
(9)\v	匹配一個(gè)垂直制表符。等價(jià)于 \x0b 和 \cK。

【3】特殊字符

所謂特殊字符,就是一些有特殊含義的字符,如上面說的 runoo*b 中的 ,簡單的說就是表示任何字符串的意思。如果要查找字符串中的 * 符號,則需要對 * 進(jìn)行轉(zhuǎn)義,即在其前加一個(gè) \,runo*ob 匹配字符串 runoob。

許多元字符要求在試圖匹配它們時(shí)特別對待。若要匹配這些特殊字符,必須首先使字符"轉(zhuǎn)義",即,將反斜杠字符\ 放在它們前面。下表列出了正則表達(dá)式中的特殊字符:

(1)$	匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n''\r'。要匹配 $ 字符本身,請使用 \$。
(2)( )	標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置。子表達(dá)式可以獲取供以后使用。要匹配這些字符,請使用 \( 和 \)。
(3)*	匹配前面的子表達(dá)式零次或多次。要匹配 * 字符,請使用 \*。
(4)+	匹配前面的子表達(dá)式一次或多次。要匹配 + 字符,請使用 \+。
(5).	匹配除換行符 \n 之外的任何單字符。要匹配 . ,請使用 \. 。
(6)[	標(biāo)記一個(gè)中括號表達(dá)式的開始。要匹配 [,請使用 \[。
(7)?	匹配前面的子表達(dá)式零次或一次,或指明一個(gè)非貪婪限定符。要匹配 ? 字符,請使用 \?。
(8)\	將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符。例如, 'n' 匹配字符 'n''\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("。
(9)^	匹配輸入字符串的開始位置,除非在方括號表達(dá)式中使用,當(dāng)該符號在方括號表達(dá)式中使用時(shí),表示不接受該方括號表達(dá)式中的字符集合。要匹配 ^ 字符本身,請使用 \^。
(10){	標(biāo)記限定符表達(dá)式的開始。要匹配 {,請使用 \{。
(11)|	指明兩項(xiàng)之間的一個(gè)選擇。要匹配 |,請使用 \|。

【4】限定符

限定符用來指定正則表達(dá)式的一個(gè)給定組件必須要出現(xiàn)多少次才能滿足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6種。

正則表達(dá)式的限定符有:

(1)*	匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"* 等價(jià)于 {0,}。	嘗試一下 ?
(2)+	匹配前面的子表達(dá)式一次或多次。例如,zo+ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價(jià)于 {1,}。	嘗試一下 ?
(3)?	匹配前面的子表達(dá)式零次或一次。例如,do(es)? 可以匹配 "do" 、 "does"、 "doxy" 中的 "do""does"。? 等價(jià)于 {0,1}。
(4){n}	n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,o{2} 不能匹配 "Bob" 中的 o,但是能匹配 "food" 中的兩個(gè) o。
(5){n,}	n 是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,o{2,} 不能匹配 "Bob" 中的 o,但能匹配 "foooood" 中的所有 o。o{1,} 等價(jià)于 o+。o{0,} 則等價(jià)于 o*。
(6){n,m}	m 和 n 均為非負(fù)整數(shù),其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 將匹配 "fooooood" 中的前三個(gè) o。o{0,1} 等價(jià)于 o?。請注意在逗號和兩個(gè)數(shù)之間不能有空格。

(1)匹配一個(gè)正整數(shù)

以下正則表達(dá)式匹配一個(gè)正整數(shù),[1-9]設(shè)置第一個(gè)數(shù)字不是 0,[0-9]* 表示任意多個(gè)數(shù)字:

/[1-9][0-9]*/

正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

請注意,限定符出現(xiàn)在范圍表達(dá)式之后。因此,它應(yīng)用于整個(gè)范圍表達(dá)式,在本例中,只指定從 0 到 9 的數(shù)字(包括 0 和 9)。

這里不使用 + 限定符,因?yàn)樵诘诙€(gè)位置或后面的位置不一定需要有一個(gè)數(shù)字。也不使用 ? 字符,因?yàn)槭褂?? 會(huì)將整數(shù)限制到只有兩位數(shù)。

(2)至少指定一位但至多兩位數(shù)字

如果你想設(shè)置 0~99 的兩位數(shù),可以使用下面的表達(dá)式來至少指定一位但至多兩位數(shù)字。

/[0-9]{1,2}/

上面的表達(dá)式的缺點(diǎn)是,只能匹配兩位數(shù)字,而且可以匹配 0、00、01、10 99 的章節(jié)編號仍只匹配開頭兩位數(shù)字。

(3)匹配 1~99 的正整數(shù)

改進(jìn)下,匹配 1~99 的正整數(shù)表達(dá)式如下:

/[1-9][0-9]?/

/[1-9][0-9]{0,1}/

(4)貪婪和非貪婪

* 和 + 限定符都是貪婪的,因?yàn)樗鼈儠?huì)盡可能多的匹配文字,只有在它們的后面加上一個(gè) ? 就可以實(shí)現(xiàn)非貪婪或最小匹配。

例如,您可能搜索 HTML 文檔,以查找在 h1 標(biāo)簽內(nèi)的內(nèi)容。HTML 代碼如下:

<h1>RUNOOB-菜鳥教程</h1>

貪婪:下面的表達(dá)式匹配從開始小于符號 (<) 到關(guān)閉 h1 標(biāo)記的大于符號 (>) 之間的所有內(nèi)容。

/<.*>/

正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

非貪婪:如果您只需要匹配開始和結(jié)束 h1 標(biāo)簽,下面的非貪婪表達(dá)式只匹配 <h1>。

/<.*?>/

正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

也可以使用以下正則表達(dá)式來匹配 h1 標(biāo)簽,表達(dá)式則是:

/<\w+?>/

正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

通過在 *、+ 或 ? 限定符之后放置 ?,該表達(dá)式從"貪婪"表達(dá)式轉(zhuǎn)換為"非貪婪"表達(dá)式或者最小匹配。

【5】定位符

定位符使您能夠?qū)⒄齽t表達(dá)式固定到行首或行尾。它們還使您能夠創(chuàng)建這樣的正則表達(dá)式,這些正則表達(dá)式出現(xiàn)在一個(gè)單詞內(nèi)、在一個(gè)單詞的開頭或者一個(gè)單詞的結(jié)尾。

定位符用來描述字符串或單詞的邊界,^ 和 $ 分別指字符串的開始與結(jié)束,\b 描述單詞的前或后邊界,\B 表示非單詞邊界。

正則表達(dá)式的定位符有:

(1)^	匹配輸入字符串開始的位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,^ 還會(huì)與 \n 或 \r 之后的位置匹配。
(2)$	匹配輸入字符串結(jié)尾的位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,$ 還會(huì)與 \n 或 \r 之前的位置匹配。
(3)\b	匹配一個(gè)單詞邊界,即字與空格間的位置。
(4)\B	非單詞邊界匹配。

注意:不能將限定符與定位符一起使用。由于在緊靠換行或者單詞邊界的前面或后面不能有一個(gè)以上位置,因此不允許諸如 ^* 之類的表達(dá)式。

若要匹配一行文本開始處的文本,請?jiān)谡齽t表達(dá)式的開始使用 ^ 字符。不要將 ^ 的這種用法與中括號表達(dá)式內(nèi)的用法混淆。

若要匹配一行文本的結(jié)束處的文本,請?jiān)谡齽t表達(dá)式的結(jié)束處使用 $ 字符。

若要在搜索章節(jié)標(biāo)題時(shí)使用定位點(diǎn),下面的正則表達(dá)式匹配一個(gè)章節(jié)標(biāo)題,該標(biāo)題只包含兩個(gè)尾隨數(shù)字,并且出現(xiàn)在行首:

/^Chapter [1-9][0-9]{0,1}/

真正的章節(jié)標(biāo)題不僅出現(xiàn)行的開始處,而且它還是該行中僅有的文本。它既出現(xiàn)在行首又出現(xiàn)在同一行的結(jié)尾。下面的表達(dá)式能確保指定的匹配只匹配章節(jié)而不匹配交叉引用。通過創(chuàng)建只匹配一行文本的開始和結(jié)尾的正則表達(dá)式,就可做到這一點(diǎn)。

/^Chapter [1-9][0-9]{0,1}$/

匹配單詞邊界稍有不同,但向正則表達(dá)式添加了很重要的能力。單詞邊界是單詞和空格之間的位置。非單詞邊界是任何其他位置。下面的表達(dá)式匹配單詞 Chapter 的開頭三個(gè)字符,因?yàn)檫@三個(gè)字符出現(xiàn)在單詞邊界后面:

/\bCha/

\b 字符的位置是非常重要的。如果它位于要匹配的字符串的開始,它在單詞的開始處查找匹配項(xiàng)。如果它位于字符串的結(jié)尾,它在單詞的結(jié)尾處查找匹配項(xiàng)。例如,下面的表達(dá)式匹配單詞 Chapter 中的字符串 ter,因?yàn)樗霈F(xiàn)在單詞邊界的前面:

/ter\b/

下面的表達(dá)式匹配 Chapter 中的字符串 apt,但不匹配 aptitude 中的字符串 apt:

/\Bapt/

字符串 apt 出現(xiàn)在單詞 Chapter 中的非單詞邊界處,但出現(xiàn)在單詞 aptitude 中的單詞邊界處。對于 \B 非單詞邊界運(yùn)算符,不可以匹配單詞的開頭或結(jié)尾,如果是下面的表達(dá)式,就不匹配 Chapter 中的 Cha:

\BCha

【6】選擇

用圓括號 () 將所有選擇項(xiàng)括起來,相鄰的選擇項(xiàng)之間用 | 分隔。

() 表示捕獲分組,() 會(huì)把每個(gè)分組里的匹配的值保存起來, 多個(gè)匹配值可以通過數(shù)字 n 來查看(n 是一個(gè)數(shù)字,表示第 n 個(gè)捕獲組的內(nèi)容)。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

但用圓括號會(huì)有一個(gè)副作用,使相關(guān)的匹配會(huì)被緩存,此時(shí)可用 ?: 放在第一個(gè)選項(xiàng)前來消除這種副作用。

其中 ?: 是非捕獲元之一,還有兩個(gè)非捕獲元是 ?= 和 ?!,這兩個(gè)還有更多的含義,前者為正向預(yù)查,在任何開始匹配圓括號內(nèi)的正則表達(dá)式模式的位置來匹配搜索字符串,后者為負(fù)向預(yù)查,在任何開始不匹配該正則表達(dá)式模式的位置來匹配搜索字符串。

以下列出 ?=、?<=、?!、?<! 的使用區(qū)別
(1)exp1(?=exp2):查找 exp2 前面的 exp1。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql
(2)(?<=exp2)exp1:查找 exp2 后面的 exp1。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql
(3)exp1(?!exp2):查找后面不是 exp2 的 exp1。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

(4)(?<!exp2)exp1:查找前面不是 exp2 的 exp1。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

【7】反向引用

(1)介紹
對一個(gè)正則表達(dá)式模式或部分模式兩邊添加圓括號將導(dǎo)致相關(guān)匹配存儲到一個(gè)臨時(shí)緩沖區(qū)中,所捕獲的每個(gè)子匹配都按照在正則表達(dá)式模式中從左到右出現(xiàn)的順序存儲。緩沖區(qū)編號從 1 開始,最多可存儲 99 個(gè)捕獲的子表達(dá)式。每個(gè)緩沖區(qū)都可以使用 \n 訪問,其中 n 為一個(gè)標(biāo)識特定緩沖區(qū)的一位或兩位十進(jìn)制數(shù)。

可以使用非捕獲元字符 ?:、?= 或 ?! 來重寫捕獲,忽略對相關(guān)匹配的保存。

(2)案例一
反向引用的最簡單的、最有用的應(yīng)用之一,是提供查找文本中兩個(gè)相同的相鄰單詞的匹配項(xiàng)的能力。以下面的句子為例:

Is is the cost of of gasoline going up up?

上面的句子很顯然有多個(gè)重復(fù)的單詞。如果能設(shè)計(jì)一種方法定位該句子,而不必查找每個(gè)單詞的重復(fù)出現(xiàn),那該有多好。下面的正則表達(dá)式使用單個(gè)子表達(dá)式來實(shí)現(xiàn)這一點(diǎn):

var str = "Is is the cost of of gasoline going up up";
var patt1 = /\b([a-z]+) \1\b/igm;
document.write(str.match(patt1));

捕獲的表達(dá)式,正如 [a-z]+ 指定的,包括一個(gè)或多個(gè)字母。正則表達(dá)式的第二部分是對以前捕獲的子匹配項(xiàng)的引用,即,單詞的第二個(gè)匹配項(xiàng)正好由括號表達(dá)式匹配。\1 指定第一個(gè)子匹配項(xiàng)。

單詞邊界元字符確保只檢測整個(gè)單詞。否則,諸如 “is issued” 或 “this is” 之類的詞組將不能正確地被此表達(dá)式識別。

正則表達(dá)式后面的全局標(biāo)記 g 指定將該表達(dá)式應(yīng)用到輸入字符串中能夠查找到的盡可能多的匹配。

表達(dá)式的結(jié)尾處的不區(qū)分大小寫 i 標(biāo)記指定不區(qū)分大小寫。

多行標(biāo)記 m 指定換行符的兩邊可能出現(xiàn)潛在的匹配。

(3)案例二
反向引用還可以將通用資源指示符 (URI) 分解為其組件。假定您想將下面的 URI 分解為協(xié)議(ftp、http 等等)、域地址和頁/路徑:

https://www.runoob.com:80/html/html-tutorial.html

下面的正則表達(dá)式提供該功能:

var str = "https://www.runoob.com:80/html/html-tutorial.html";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
for (var i = 0; i < arr.length ; i++) {
    document.write(arr[i]);
    document.write("<br>");
}

第三行代碼 str.match(patt1) 返回一個(gè)數(shù)組,實(shí)例中的數(shù)組包含 5 個(gè)元素,索引 0 對應(yīng)的是整個(gè)字符串,索引 1 對應(yīng)第一個(gè)匹配符(括號內(nèi)),以此類推。

第一個(gè)括號子表達(dá)式捕獲 Web 地址的協(xié)議部分。該子表達(dá)式匹配在冒號和兩個(gè)正斜杠前面的任何單詞。

第二個(gè)括號子表達(dá)式捕獲地址的域地址部分。子表達(dá)式匹配非 : 和 / 之后的一個(gè)或多個(gè)字符。

第三個(gè)括號子表達(dá)式捕獲端口號(如果指定了的話)。該子表達(dá)式匹配冒號后面的零個(gè)或多個(gè)數(shù)字。只能重復(fù)一次該子表達(dá)式。

最后,第四個(gè)括號子表達(dá)式捕獲 Web 地址指定的路徑和 / 或頁信息。該子表達(dá)式能匹配不包括 # 或空格字符的任何字符序列。

將正則表達(dá)式應(yīng)用到上面的 URI,各子匹配項(xiàng)包含下面的內(nèi)容:
第一個(gè)括號子表達(dá)式包含 https
第二個(gè)括號子表達(dá)式包含 www.runoob.com
第三個(gè)括號子表達(dá)式包含 :80
第四個(gè)括號子表達(dá)式包含 /html/html-tutorial.html

【三】修飾符

標(biāo)記也稱為修飾符,正則表達(dá)式的標(biāo)記用于指定額外的匹配策略。

標(biāo)記不寫在正則表達(dá)式里,標(biāo)記位于表達(dá)式之外,格式如下:

/pattern/flags

正則表達(dá)式常用的修飾符:

(1)i	ignore - 不區(qū)分大小寫	將匹配設(shè)置為不區(qū)分大小寫,搜索時(shí)不區(qū)分大小寫: A 和 a 沒有區(qū)別。
(2)g	global - 全局匹配	查找所有的匹配項(xiàng)。
(3)m	multi line - 多行匹配	使邊界字符 ^ 和 $ 匹配每一行的開頭和結(jié)尾,記住是多行,而不是整個(gè)字符串的開頭和結(jié)尾。
(4)s	特殊字符圓點(diǎn) . 中包含換行符 \n	默認(rèn)情況下的圓點(diǎn) . 是匹配除換行符 \n 之外的任何字符,加上 s 修飾符之后, . 中包含換行符 \n。

【1】g 修飾符

g 修飾符可以查找字符串中所有的匹配項(xiàng):
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql
在字符串中查找 “runoob”:

var str="Google runoob taobao runoob"; 
var n1=str.match(/runoob/);   // 查找第一次匹配項(xiàng)
var n2=str.match(/runoob/g);  // 查找所有匹配項(xiàng)

【2】i 修飾符

i 修飾符為不區(qū)分大小寫匹配,實(shí)例如下:
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

在字符串中查找 “runoob”:

var str="Google runoob taobao RUNoob"; 
var n1=str.match(/runoob/g);   // 區(qū)分大小寫
var n2=str.match(/runoob/gi);  // 不區(qū)分大小寫

【3】m 修飾符

m 修飾符可以使 ^ 和 $ 匹配一段文本中每行的開始和結(jié)束位置。

g 只匹配第一行,添加 m 之后實(shí)現(xiàn)多行。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql
以下實(shí)例字符串中使用 \n 來換行:

在字符串中查找 “runoob”:

var str="runoobgoogle\ntaobao\nrunoobweibo";
var n1=str.match(/^runoob/g);   // 匹配一個(gè)
var n2=str.match(/^runoob/gm);  // 多行匹配

【4】s 修飾符

默認(rèn)情況下的圓點(diǎn) . 是 匹配除換行符 \n 之外的任何字符,加上 s 之后, . 中包含換行符 \n。
正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

s 修飾符實(shí)例如下:
在字符串中查找:

var str="google\nrunoob\ntaobao";
var n1=str.match(/google./);   // 沒有使用 s,無法匹配\n
var n2=str.match(/runoob./s);  // 使用 s,匹配\n

【四】元字符

【1】字符匹配

(1)普通字符:普通字符按照字面意義進(jìn)行匹配,例如匹配字母 "a" 將匹配到文本中的 "a" 字符。
(2)元字符:元字符具有特殊的含義,例如 \d 匹配任意數(shù)字字符,\w 匹配任意字母數(shù)字字符,. 匹配任意字符(除了換行符)等。

【2】量詞

(1)*:匹配前面的模式零次或多次。
(2)+:匹配前面的模式一次或多次。
(3)?:匹配前面的模式零次或一次。
(4){n}:匹配前面的模式恰好 n 次。
(5){n,}:匹配前面的模式至少 n 次。
(6){n,m}:匹配前面的模式至少 n 次且不超過 m 次。

【3】字符類

(1)[ ]:匹配括號內(nèi)的任意一個(gè)字符。例如,[abc] 匹配字符 "a"、"b""c"。
(2)[^ ]:匹配除了括號內(nèi)的字符以外的任意一個(gè)字符。例如,[^abc] 匹配除了字符 "a""b""c" 以外的任意字符。

【4】邊界匹配

(1)^:匹配字符串的開頭。
(2)$:匹配字符串的結(jié)尾。
(3)\b:匹配單詞邊界。
(4)\B:匹配非單詞邊界。

【5】分組和捕獲

(1)( ):用于分組和捕獲子表達(dá)式。
(2)(?: ):用于分組但不捕獲子表達(dá)式。

【6】特殊字符

(1)\:轉(zhuǎn)義字符,用于匹配特殊字符本身。
(2).:匹配任意字符(除了換行符)。
(3)|:用于指定多個(gè)模式的選擇。

【7】常用的元字符

元字符:即為有特定含義的字符,常見的元字符如下

.	匹配除換行符以外的任意字符
\w	匹配字母或數(shù)字或下劃線或漢字
\s	匹配任意的空白符
\d	匹配數(shù)字
\b	匹配單詞的開始或結(jié)束
^	匹配字符串的開始(在集合字符里[^a]表示非(不匹配)的意思
$	匹配字符串的結(jié)束

【8】詳解和示例

(1). 匹配任何任意字符 例如 . 可以匹配 1,n,*,+,- ,等

(2)\d\w\s 匹配第一個(gè)字符為數(shù)字,第二個(gè)字符為字母或數(shù)字、或下劃線或漢字,第三字符為空格的字符串 例如:11 ,2a , 1_

(3)^\d\d\d$ 匹配三個(gè)全部都為數(shù)字的字符串 例如: 123,456,789
還可以用于驗(yàn)證輸入的字符串是否符合qq(身份證號)的驗(yàn)證 : 例如:^\d{8}$ 匹配8位數(shù)字的qq號,^\d{15}&匹配15位均為數(shù)字的身份證號

(4)\bOlive\b 匹配單詞Olive 例如: I Love Oliver and Olive .這個(gè)時(shí)候返回的是Olive 而不是Oliver,因?yàn)閈b…\b返回的匹配的單詞

【9】分析一個(gè)匹配郵箱的正則表達(dá)式

var str = "abcd test@runoob.com 1234";
var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g;
document.write(str.match(patt1));

正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

正則表達(dá)式使用匯總,正則表達(dá)式,python,mysql

【五】運(yùn)算符優(yōu)先級

正則表達(dá)式從左到右進(jìn)行計(jì)算,并遵循優(yōu)先級順序,這與算術(shù)表達(dá)式非常類似。

相同優(yōu)先級的從左到右進(jìn)行運(yùn)算,不同優(yōu)先級的運(yùn)算先高后低。下表從最高到最低說明了各種正則表達(dá)式運(yùn)算符的優(yōu)先級順序:

(1)\:轉(zhuǎn)義符
(2)(), (?:), (?=), []:圓括號和方括號
(3)*, +, ?, {n}, {n,}, {n,m}:限定符
(4)^, $, \任何元字符、任何字符:定位點(diǎn)和序列(即:位置和順序)
(5)|:替換,"或"操作
字符具有高于替換運(yùn)算符的優(yōu)先級,使得"m|food"匹配"m""food"。若要匹配"mood""food",請使用括號創(chuàng)建子表達(dá)式,從而產(chǎn)生"(m|f)ood"。

【六】匹配規(guī)則

【1】基本模式匹配

一切從最基本的開始。模式,是正則表達(dá)式最基本的元素,它們是一組描述字符串特征的字符。模式可以很簡單,由普通的字符串組成,也可以非常復(fù)雜,往往用特殊的字符表示一個(gè)范圍內(nèi)的字符、重復(fù)出現(xiàn),或表示上下文。例如:

^once

這個(gè)模式包含一個(gè)特殊的字符 ^,表示該模式只匹配那些以 once 開頭的字符串。例如該模式與字符串 “once upon a time” 匹配,與 “There once was a man from NewYork” 不匹配。正如如 ^ 符號表示開頭一樣,$ 符號用來匹配那些以給定模式結(jié)尾的字符串。

bucket$

這個(gè)模式與 “Who kept all of this cash in a bucket” 匹配,與 “buckets” 不匹配。字符 ^ 和 $ 同時(shí)使用時(shí),表示精確匹配(字符串與模式一樣)。例如:

^bucket$

只匹配字符串 “bucket”。如果一個(gè)模式不包括 ^ 和 $,那么它與任何包含該模式的字符串匹配。例如模式:

once

與字符串

There once was a man from NewYork
Who kept all of his cash in a bucket.

是匹配的。

在該模式中的字母 (o-n-c-e) 是字面的字符,也就是說,他們表示該字母本身,數(shù)字也是一樣的。其他一些稍微復(fù)雜的字符,如標(biāo)點(diǎn)符號和白字符(空格、制表符等),要用到轉(zhuǎn)義序列。所有的轉(zhuǎn)義序列都用反斜杠 \ 打頭。制表符的轉(zhuǎn)義序列是 \t。所以如果我們要檢測一個(gè)字符串是否以制表符開頭,可以用這個(gè)模式:

^\t 

類似的,用 \n 表示"新行",\r 表示回車。其他的特殊符號,可以用在前面加上反斜杠,如反斜杠本身用 \ 表示,句號 . 用 . 表示,以此類推。

【2】字符簇

在 INTERNET 的程序中,正則表達(dá)式通常用來驗(yàn)證用戶的輸入。當(dāng)用戶提交一個(gè) FORM 以后,要判斷輸入的電話號碼、地址、EMAIL 地址、信用卡號碼等是否有效,用普通的基于字面的字符是不夠的。

所以要用一種更自由的描述我們要的模式的辦法,它就是字符簇。要建立一個(gè)表示所有元音字符的字符簇,就把所有的元音字符放在一個(gè)方括號里:

[AaEeIiOoUu]

這個(gè)模式與任何元音字符匹配,但只能表示一個(gè)字符。用連字號可以表示一個(gè)字符的范圍,如:

[a-z] // 匹配所有的小寫字母 
[A-Z] // 匹配所有的大寫字母 
[a-zA-Z] // 匹配所有的字母 
[0-9] // 匹配所有的數(shù)字 
[0-9\.\-] // 匹配所有的數(shù)字,句號和減號 
[ \f\r\t\n] // 匹配所有的白字符

同樣的,這些也只表示一個(gè)字符,這是一個(gè)非常重要的。如果要匹配一個(gè)由一個(gè)小寫字母和一位數(shù)字組成的字符串,比如 “z2”、“t6” 或 “g7”,但不是 “ab2”、“r2d3” 或 “b52” 的話,用這個(gè)模式:

^[a-z][0-9]$

盡管 [a-z] 代表 26 個(gè)字母的范圍,但在這里它只能與第一個(gè)字符是小寫字母的字符串匹配。

前面曾經(jīng)提到^表示字符串的開頭,但它還有另外一個(gè)含義。當(dāng)在一組方括號里使用 ^ 時(shí),它表示"非"或"排除"的意思,常常用來剔除某個(gè)字符。還用前面的例子,我們要求第一個(gè)字符不能是數(shù)字:

^[^0-9][0-9]$

這個(gè)模式與 “&5”、“g7"及”-2" 是匹配的,但與 “12”、“66” 是不匹配的。下面是幾個(gè)排除特定字符的例子:

[^a-z] //除了小寫字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了雙引號(")和單引號(')之外的所有字符

特殊字符 .(點(diǎn),句號)在正則表達(dá)式中用來表示除了"新行"之外的所有字符。所以模式 ^.5$ 與任何兩個(gè)字符的、以數(shù)字5結(jié)尾和以其他非"新行"字符開頭的字符串匹配。模式 . 可以匹配任何字符串,換行符(\n、\r)除外。

【3】確定重復(fù)出現(xiàn)

到現(xiàn)在為止,你已經(jīng)知道如何去匹配一個(gè)字母或數(shù)字,但更多的情況下,可能要匹配一個(gè)單詞或一組數(shù)字。一個(gè)單詞有若干個(gè)字母組成,一組數(shù)字有若干個(gè)單數(shù)組成。跟在字符或字符簇后面的花括號({})用來確定前面的內(nèi)容的重復(fù)出現(xiàn)的次數(shù)。

(1)^[a-zA-Z_]$:所有的字母和下劃線
(2)^[[:alpha:]]{3}$:所有的3個(gè)字母的單詞
(3)^a$:字母a
(4)^a{4}$:aaaa
(5)^a{2,4}$:aa,aaa或aaaa
(6)^a{1,3}$:a,aa或aaa
(7)^a{2,}$:包含多于兩個(gè)a的字符串
(8)^a{2,}:如:aardvark和aaab,但apple不行
(9)a{2,}:如:baad和aaa,但Nantucket不行
(10)\t{2}:兩個(gè)制表符
(11).{2}:所有的兩個(gè)字符

這些例子描述了花括號的三種不同的用法。一個(gè)數(shù)字 {x} 的意思是前面的字符或字符簇只出現(xiàn)x次 ;一個(gè)數(shù)字加逗號 {x,} 的意思是前面的內(nèi)容出現(xiàn)x或更多的次數(shù) ;兩個(gè)數(shù)字用逗號分隔的數(shù)字 {x,y} 表示 前面的內(nèi)容至少出現(xiàn)x次,但不超過y次。我們可以把模式擴(kuò)展到更多的單詞或數(shù)字:

^[a-zA-Z0-9_]{1,}$      // 所有包含一個(gè)以上的字母、數(shù)字或下劃線的字符串 
^[1-9][0-9]{0,}$        // 所有的正整數(shù) 
^\-{0,1}[0-9]{1,}$      // 所有的整數(shù) 
^[-]?[0-9]+\.?[0-9]+$   // 所有的浮點(diǎn)數(shù)

最后一個(gè)例子,以一個(gè)可選的負(fù)號 ([-]?) 開頭 (^)、跟著1個(gè)或更多的數(shù)字([0-9]+)、和一個(gè)小數(shù)點(diǎn)(.)再跟上1個(gè)或多個(gè)數(shù)字([0-9]+),并且后面沒有其他任何東西($)。下面你將知道能夠使用的更為簡單的方法。

特殊字符 ? 與 {0,1} 是相等的,它們都代表著: 0個(gè)或1個(gè)前面的內(nèi)容 或 前面的內(nèi)容是可選的 。所以剛才的例子可以簡化為:

^\-?[0-9]{1,}\.?[0-9]{1,}$

特殊字符 * 與 {0,} 是相等的,它們都代表著 0 個(gè)或多個(gè)前面的內(nèi)容 。最后,字符 + 與 {1,} 是相等的,表示 1 個(gè)或多個(gè)前面的內(nèi)容 ,所以上面的4個(gè)例子可以寫成:

^[a-zA-Z0-9_]+$      // 所有包含一個(gè)以上的字母、數(shù)字或下劃線的字符串 
^[1-9][0-9]*$        // 所有的正整數(shù) 
^\-?[0-9]+$          // 所有的整數(shù) 
^[-]?[0-9]+(\.[0-9]+)?$ // 所有的浮點(diǎn)數(shù)

【二】反義字符

(1)常用的反義字符

反義字符:多用于查找除某個(gè)字符以外其他任意字符均可以的情況

\W	匹配任意不是字母,數(shù)字,下劃線,漢字的字符
\S	匹配任意不是空白符的字符
\D	匹配任意非數(shù)字的字符
\B	匹配不是單詞開頭或結(jié)束的位置
[^x]	匹配除了x以外的任意字符
[^aeiou]	匹配除了aeiou這幾個(gè)字母以外的任意字符

(2)詳解和示例

(1)\W 匹配除字母、數(shù)字、下劃線、漢字以為的字符形如 +,-,*

(2)\S 匹配除空格以外的任意字符形如:1,* ,)

(3)[^abcde] 匹配除abcde以為的其他字符 如 e,f,g,h

【三】限定字符

(1)常用的限定符

限定字符多用于重復(fù)匹配次數(shù)

*	重復(fù)零次或更多次
+	重復(fù)一次或更多次
?	重復(fù)零次或一次
{n}	重復(fù)n次
{n,}	重復(fù)n次或更多次
{n,m}	重復(fù)n到m次

(2)詳解和示例

(1)\d* 匹配重復(fù)0次或多次數(shù)字 例如:可能為空 或 任意數(shù)字 (2,3。。。。)

(2)\d+ 匹配重復(fù)1次或多次數(shù)字 例如:可能為1個(gè)或多個(gè)數(shù)字 1,23,234,2345,…

(3)\d? 匹配重復(fù)次個(gè)或者一次數(shù)字 例如:可能為空或者任意的一個(gè)數(shù)字(1,2,。。。)

(4)\d{8}匹配重復(fù)8次數(shù)字 例如:123456768

(5)\d{4,}匹配重復(fù)至少4次數(shù)字 例如:1234,12345,124244,。。。。。

(6)^\d{8,11}$ 匹配重復(fù)8-11次數(shù)字 例如:12345678,123456789,1234567890,12345678901

【四】轉(zhuǎn)義字符

在實(shí)際的開發(fā)中,可能會(huì)遇到要比配元字符的情況,這個(gè)時(shí)候就需要進(jìn)行字符轉(zhuǎn)義

如元字符 .  *  \ 需要轉(zhuǎn)換為\.   \*   \\

例如: 需要匹配qq郵箱 \d{8,}+qq+.+com 在這里的. 就需要加斜杠

例如:在使用split分割字符串的時(shí)候,如果是根據(jù)"."來分割的話,需要使用轉(zhuǎn)義字符

【五】字符分支

字符分枝多用于滿足不同情況的選擇,用“|”將不同的條件分割開來,比如有些固定電話區(qū)號有三位,有些有四位,這個(gè)時(shí)候可以采用字符分枝

例如:\d{3}-\d{8}|\d{4}-\d{8} 可以匹配兩種不同長度區(qū)號的固定電話

下邊的IP地址正則表達(dá)式也有用到字符分枝

【六】字符分組

字符分組多用于將多個(gè)字符重復(fù),主要通過使用小括號()來進(jìn)行分組

形如:(\d\w){3} 重復(fù)匹配3次(\d\w)

常用于表示IP地址 形如: ((25[0-5]|2[0-4][0-9]|[0-1]\d\d).){3}(25[0-5]|2[0-4][0-9]|[0-1]\d\d)

解析:先把IP地址分為兩部分一部分是123.123.123. 另一部分是123,又因Ip最大值為255,所以先使用分組,然后在組里邊再進(jìn)行選擇,組里也有三部分,0-199,200-249,250-255,分別和上述的表達(dá)是對應(yīng),最后還要注意分組之后還要加上一個(gè).,因?yàn)槭窃址砸D(zhuǎn)義故加上. 然后再把這部分整體看做是一個(gè)組,重復(fù)三次,再加上僅有數(shù)字的一組也就是不帶.的那一組即可完成IP地址的校驗(yàn)

常用分組語法

分類	代碼/語法	說明
捕獲	(exp)		匹配exp,并捕獲文本到自動(dòng)命名的組里
		(?<name>exp)	匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp)
		(?:exp)		匹配exp,不捕獲匹配的文本,也不給此分組分配組號
零寬斷言	(?=exp)		匹配exp前面的位置
		(?<=exp)	匹配exp后面的位置
		(?!exp)		匹配后面跟的不是exp的位置
		(?<!exp)	匹配前面不是exp的位置
注釋	(?#comment)	這種類型的分組不對正則表達(dá)式的處理產(chǎn)生任何影響,用于提供注釋讓人閱讀

【七】懶惰匹配和貪婪匹配

貪婪匹配:正則表達(dá)式中包含重復(fù)的限定符時(shí),通常的行為是匹配盡可能多的字符。

懶惰匹配,有時(shí)候需要匹配盡可能少的字符。

例如: a.*b,它將會(huì)匹配最長的以a開始,以b結(jié)束的字符串。如果用它來搜索aabab的話,它會(huì)匹配整個(gè)字符串a(chǎn)abab。但是我們此時(shí)可能需要匹配的是ab這樣的話就需要用到懶惰匹配了。懶惰匹配會(huì)匹配盡可能少的字符

常用的懶惰匹配限定符如下

*?		重復(fù)任意次,但盡可能少重復(fù)
+?		重復(fù)1次或更多次,但盡可能少重復(fù)
??		重復(fù)0次或1次,但盡可能少重復(fù)
{n,m}?	重復(fù)n到m次,但盡可能少重復(fù)
{n,}?	重復(fù)n次以上,但盡可能少重復(fù)

【八】后向引用

后向引用用于重復(fù)搜索前面某個(gè)分組匹配的文本。

使用小括號指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。默認(rèn)情況下,每個(gè)分組會(huì)自動(dòng)擁有一個(gè)組號,規(guī)則是:從左向右,以分組的左括號為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號為1,第二個(gè)為2,以此類推

示例:\b(\w+)\b\s+\1\b可以用來匹配重復(fù)的單詞,像go go, 或者kitty kitty。

這個(gè)表達(dá)式首先是一個(gè)單詞,也就是單詞開始處和結(jié)束處之間的多于一個(gè)的字母或數(shù)字(\b(\w+)\b),這個(gè)單詞會(huì)被捕獲到編號為1的分組中,然后是1個(gè)或幾個(gè)空白符(\s+),最后是分組1中捕獲的內(nèi)容(也就是前面匹配的那個(gè)單詞)(\1)。

你也可以自己指定子表達(dá)式的組名。要指定一個(gè)子表達(dá)式的組名,請使用這樣的語法:(?\w+)(或者把尖括號換成’也行:(?‘Word’\w+)),這樣就把\w+的組名指定為Word了。要反向引用這個(gè)分組捕獲的內(nèi)容,你可以使用\k,所以上一個(gè)例子也可以寫成這樣:\b(?\w+)\b\s+\k\b

【九】零寬斷言

有時(shí)候需要查找某些匹配之前或之后的東西,這個(gè)時(shí)候就需要用到們像\b,^,$那樣用于指定一個(gè)位置,這個(gè)位置應(yīng)該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言

(?=exp)也叫零寬度正預(yù)測先行斷言,它斷言自身出現(xiàn)的位置的后面能匹配表達(dá)式exp。比如\b\w+(?=ing\b),匹配以ing結(jié)尾的單詞的前面部分(除了ing以外的部分),如查找I’m singing while you’re dancing.時(shí),它會(huì)匹配sing和danc。

(?<=exp)也叫零寬度正回顧后發(fā)斷言,它斷言自身出現(xiàn)的位置的前面能匹配表達(dá)式exp。比如(?<=\bre)\w+\b會(huì)匹配以re開頭的單詞的后半部分(除了re以外的部分),例如在查找reading a book時(shí),它匹配ading。

【十】其他語法

(1).NET常用的處理選項(xiàng)

IgnoreCase(忽略大小寫)	匹配時(shí)不區(qū)分大小寫。
Multiline(多行模式)		更改^和$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個(gè)字符串的開頭和結(jié)尾匹配。(在此模式下,$的精確含意是:匹配\n之前的位置以及字符串結(jié)束前的位置.)
Singleline(單行模式)		更改.的含義,使它與每一個(gè)字符匹配(包括換行符\n)。
IgnorePatternWhitespace(忽略空白)	忽略表達(dá)式中的非轉(zhuǎn)義空白并啟用由#標(biāo)記的注釋。
ExplicitCapture(顯式捕獲)	僅捕獲已被顯式命名的組。

(2)其他語法

\a	報(bào)警字符(打印它的效果是電腦嘀一聲)
\b	通常是單詞分界位置,但如果在字符類里使用代表退格
\t	制表符,Tab
\r	回車
\v	豎向制表符
\f	換頁符
\n	換行符
\e	Escape
\0nn	ASCII代碼中八進(jìn)制代碼為nn的字符
\xnn	ASCII代碼中十六進(jìn)制代碼為nn的字符
\unnnn	Unicode代碼中十六進(jìn)制代碼為nnnn的字符
\cN	ASCII控制字符。比如\cC代表Ctrl+C
\A	字符串開頭(類似^,但不受處理多行選項(xiàng)的影響)
\Z	字符串結(jié)尾或行尾(不受處理多行選項(xiàng)的影響)
\z	字符串結(jié)尾(類似$,但不受處理多行選項(xiàng)的影響)
\G	當(dāng)前搜索的開頭
\p{name}	Unicode中命名為name的字符類,例如\p{IsGreek}
(?>exp)	貪婪子表達(dá)式
(?<x>-<y>exp)	平衡組
(?im-nsx:exp)	在子表達(dá)式exp中改變處理選項(xiàng)
(?im-nsx)	為表達(dá)式后面的部分改變處理選項(xiàng)
(?(exp)yes|no)	把exp當(dāng)作零寬正向先行斷言,如果在這個(gè)位置能匹配,使用yes作為此組的表達(dá)式;否則使用no
(?(exp)yes)	同上,只是使用空表達(dá)式作為no
(?(name)yes|no)	如果命名為name的組捕獲到了內(nèi)容,使用yes作為表達(dá)式;否則使用no
(?(name)yes)	同上,只是使用空表達(dá)式作為no

【十一】常用的實(shí)用正則表達(dá)式整理

(1)常用的正則表達(dá)式

    只能輸入數(shù)字:"^[0-9]*$"。

  只能輸入n位的數(shù)字:"^"d{n}$"。

  只能輸入至少n位的數(shù)字:"^"d{n,}$"。

  只能輸入m~n位的數(shù)字:。"^"d{m,n}$"

  只能輸入零和非零開頭的數(shù)字:"^(0|[1-9][0-9]*)$"。

  只能輸入有兩位小數(shù)的正實(shí)數(shù):"^[0-9]+(.[0-9]{2})?$"。

  只能輸入有1~3位小數(shù)的正實(shí)數(shù):"^[0-9]+(.[0-9]{1,3})?$"。

  只能輸入非零的正整數(shù):"^"+?[1-9][0-9]*$"。

  只能輸入非零的負(fù)整數(shù):"^"-[1-9][]0-9"*$。

  只能輸入長度為3的字符:"^.{3}$"。

  只能輸入由26個(gè)英文字母組成的字符串:"^[A-Za-z]+$"。

  只能輸入由26個(gè)大寫英文字母組成的字符串:"^[A-Z]+$"。

  只能輸入由26個(gè)小寫英文字母組成的字符串:"^[a-z]+$"。

  只能輸入由數(shù)字和26個(gè)英文字母組成的字符串:"^[A-Za-z0-9]+$"。

  只能輸入由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串:"^"w+$"。

  驗(yàn)證用戶密碼:"^[a-zA-Z]"w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字符、數(shù)字和下劃線。

  驗(yàn)證是否含有^%&,;=?$""等字符:"[^%&’,;=?$"x22]+"。

  只能輸入漢字:"^["u4e00-"u9fa5]{0,}$"

  驗(yàn)證Email地址:"/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/"。

  驗(yàn)證InternetURL"^http://(["w-]+".)+["w-]+(/["w-./?%&=]*)?$"。

  驗(yàn)證電話號碼:"^("("d{3,4}-)|"d{3.4}-)?"d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX""XXXXXXXX"。

  驗(yàn)證身份證號(15位或18位數(shù)字)"^"d{15}|"d{18}$"。

  驗(yàn)證一年的12個(gè)月:"^(0?[1-9]|1[0-2])$"正確格式為:"01""09""1""12"。

  驗(yàn)證一個(gè)月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01""09""1""31"。

【十二】正則表達(dá)式案例分析

(1)給json字符串的key和value加上雙引號

(1)需求描述
原來的格式是:[{CODE:PDM_config10200,SYS:PDM}]
想要的格式是:[{“CODE”:“PDM_config10200”,“SYS”:“PDM”}]

(2)第一次實(shí)現(xiàn)的方式
實(shí)現(xiàn)的方式:jsonDependantJobs.replaceAll(“(\w+)\s*:\s*(\w+)”, “”$1":“$2"”)

細(xì)節(jié)分析:
\w:匹配字母、數(shù)字、下劃線。等價(jià)于 [A-Za-z0-9_]
+:匹配一個(gè)或者多個(gè)
\s:匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于 [
*:通配符匹配零個(gè)或多個(gè)字符

(3)出現(xiàn)問題
如果格式變成:[{CODE:PDATA.PDM_config10203,SYS:PDM}]
結(jié)果就會(huì)變成:[{“CODE”:“PDATA”.PDM_config10203,“SYS”:“PDM”}]

(4)第二次實(shí)現(xiàn)的方式
實(shí)現(xiàn)的方式:jsonDependantJobs.replaceAll(“(\w+)\s*:\s*(,|})”, “”$1":“$2"”)文章來源地址http://www.zghlxwxcb.cn/news/detail-554294.html

到了這里,關(guān)于正則表達(dá)式使用匯總的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python之[正則表達(dá)式]--通配符使用方法(最新可用)

    . 匹配任意字符,除了換行符 ^ 匹配字符串開始的位置 $ 匹配字符串結(jié)束的位置,當(dāng)出現(xiàn)多組符合的匹配時(shí),返回字符串最后的那組匹配 * 匹配 0,1,n 次 前面的原子【貪婪模式:盡可能多的匹配】 ? 匹配 0,1 次 前面的原子【懶惰模式:精確匹配】 + 匹配 1,n 次 前面的原子

    2024年02月07日
    瀏覽(22)
  • Python正則表達(dá)式之學(xué)習(xí)正則表達(dá)式三步曲

    ????????正則表達(dá)式描述了一種字符串匹配的模式,可以用來檢查一個(gè)串的有無某子串,或者做子串匹配替換,取出子串等操作。也可以說正則表達(dá)式就是字符串的匹配規(guī)則,也可以理解為是一種模糊匹配,匹配滿足正則條件的字符串。 ????????1、數(shù)據(jù)驗(yàn)證(eg:表單驗(yàn)

    2024年02月15日
    瀏覽(95)
  • MySQL正則表達(dá)式 | 事務(wù)詳解

    MySQL正則表達(dá)式 | 事務(wù)詳解

    目錄 一、正則表達(dá)式 實(shí)例操作 二、事務(wù) 事務(wù)控制語句 MYSQL 事務(wù)處理主要有兩種方法 SQL測試代碼 PHP中使用事務(wù)實(shí)例 使用保留點(diǎn) SAVEPOINT MySQL可以通過? LIKE ...% ?來進(jìn)行模糊匹配。 MySQL 同樣也支持其他正則表達(dá)式的匹配, MySQL中使用 REGEXP 操作符來進(jìn)行正則表達(dá)式匹配。 如果

    2023年04月18日
    瀏覽(17)
  • MySQL正則表達(dá)式檢索數(shù)據(jù)

    MySQL正則表達(dá)式檢索數(shù)據(jù)

    目錄 一、使用正則表達(dá)式進(jìn)行基本字符匹配 1.使用regexp 2.使用正則表達(dá)式? .? 二、進(jìn)行OR匹配 1.為搜索兩個(gè)串之一,使用? ?|?? 2.匹配幾個(gè)字符之一[] 3.匹配范圍 ?4.匹配特殊字符 過濾數(shù)據(jù)允許使用 匹配、比較、通配符 操作來尋找數(shù)據(jù),但是隨著過濾條件的復(fù)雜性增

    2024年02月14日
    瀏覽(25)
  • Python使用正則表達(dá)式識別代碼中的中文、英文和數(shù)字實(shí)例演示

    Python使用正則表達(dá)式識別代碼中的中文、英文和數(shù)字實(shí)例演示

    在文本處理和數(shù)據(jù)分析中,有時(shí)候需要從代碼中提取出其中包含的中文、英文和數(shù)字信息。正則表達(dá)式是一種強(qiáng)大的工具,可以幫助我們實(shí)現(xiàn)這一目標(biāo)。本文將分三個(gè)部分詳細(xì)介紹如何使用正則表達(dá)式在 Python 中識別代碼中的中文、英文和數(shù)字。 在 Python 中,可以使用 Unicod

    2024年02月14日
    瀏覽(29)
  • mysql 正則表達(dá)式 提取 指定字符

    mysql 正則表達(dá)式 提取 指定字符

    eg: 使用正則表達(dá)式來進(jìn)行匹配替換: REGEXP_REPLACE(\\\'需要進(jìn)行替換的字段‘, ‘被替換的’,‘替換的內(nèi)容’) eg: 模式 說明 ^ 匹配輸入字符串的開始位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,^ 也匹配 ‘n’ 或 ‘r’ 之后的位置。 $ 匹配輸入字符串的結(jié)束位置。

    2024年02月06日
    瀏覽(28)
  • 老夫的正則表達(dá)式大成了,桀桀桀桀?。?!【Python 正則表達(dá)式筆記】

    特殊字符 .^$?+*{}[]()| 為特殊字符,若想要使用字面值,必須使用 進(jìn)行轉(zhuǎn)義 字符類 [] [] 匹配包含在方括號中的任何字符。它也可以指定范圍,例: [a-zA-Z0-9] 表示a到z,A到Z,0到9之間的任何一個(gè)字符 [u4e00-u9fa5] 匹配 Unicode 中文 [^x00-xff] 匹配雙字節(jié)字符(包括中文) 在 [] 中

    2024年02月04日
    瀏覽(21)
  • 機(jī)器學(xué)習(xí)與數(shù)據(jù)科學(xué)-專題1 Python正則表達(dá)式-【正則表達(dá)式入門-1】

    機(jī)器學(xué)習(xí)與數(shù)據(jù)科學(xué)-專題1 Python正則表達(dá)式-【正則表達(dá)式入門-1】

    為了完成本關(guān)任務(wù),你需要掌握: 在 Python 中使用正則表達(dá)式; 最基礎(chǔ)正則表達(dá)式; 正則匹配函數(shù)。 在 Python 中使用正則表達(dá)式 正可謂人生苦短,我用 Python。Python 有個(gè)特點(diǎn)就是庫非常多,自然擁有正則匹配這種常見的庫,并且此庫已經(jīng)嵌入在 Python 標(biāo)準(zhǔn)庫中,使用起來非常

    2024年01月22日
    瀏覽(109)
  • python正則表達(dá)式-正則基礎(chǔ)

    目錄 一、任一元素 二、匹配特定的字符類別 ? ? ? ? ?1、d? w 三、多個(gè)元素 ? ? ? ? ?1、兩位元素 [][] ? ? ? ? ?2、* + ? ? ? ? ? ?3、重復(fù)次數(shù) {} ? ? ? ? ?4、位置匹配 ^ $ ? ? ? ? ?5、子表達(dá)式() ????????[]:1、[ab]?匹配a或b; ? ? ? ?2、[0-9]?匹配任意一個(gè)數(shù)

    2024年02月05日
    瀏覽(22)
  • MySQL數(shù)據(jù)庫——MySQL REGEXP:正則表達(dá)式

    正則表達(dá)式主要用來查詢和替換符合某個(gè)模式(規(guī)則)的文本內(nèi)容。例如,從一個(gè)文件中提取電話號碼,查找一篇文章中重復(fù)的單詞、替換文章中的敏感語匯等,這些地方都可以使用正則表達(dá)式。正則表達(dá)式強(qiáng)大且靈活,常用于非常復(fù)雜的查詢。 MySQL 中,使用? REGEXP ?

    2024年02月01日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包