日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

通用正则表达式

發(fā)布時(shí)間:2025/3/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通用正则表达式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

區(qū)別于常見(jiàn)的正則表達(dá)式教程,本教程讓你快速入門,并規(guī)避常見(jiàn)問(wèn)題。

(大家可以閱讀完后邊的教程再閱讀注意事項(xiàng),注意事項(xiàng)放在前邊只是為了引起注意)

在開(kāi)始之前先說(shuō)一些值得大家注意的事項(xiàng)吧

1 正則表達(dá)式?jīng)]有邏輯與、邏輯非關(guān)系。那么要實(shí)現(xiàn)邏輯與,就要靠表達(dá)式序列來(lái)實(shí)現(xiàn)了,也就是組合。而邏輯非要靠零寬斷言來(lái)實(shí)現(xiàn)了,但是不幸的是,現(xiàn)在大多數(shù)工具對(duì)斷言啊,分組捕獲啊,的支持并不完整。比如sed,是不支持?jǐn)嘌缘摹?/p>

2 正則表達(dá)式的邏輯或關(guān)系,在正則表達(dá)式中是靠多選來(lái)實(shí)現(xiàn)的。

3 請(qǐng)謹(jǐn)遵語(yǔ)法,對(duì)于那些用慣了一個(gè)*來(lái)代表若干字符的,請(qǐng)注意,這并不是標(biāo)準(zhǔn)的正則表達(dá)式,而是一些工具自己內(nèi)部封裝的特殊符號(hào)。

4 注意匹配的范圍,正則表達(dá)式默認(rèn)是匹配最大范圍,就是說(shuō)大家要考慮匹配句子?匹配單詞?匹配單詞的一部分?比如有以下的文本行,int main(int argc... ,對(duì)于表達(dá)式.*t\b將匹配以下內(nèi)容 int main(int,而如果你用\w*t\b,將只匹配2個(gè)int,更嚴(yán)謹(jǐn)?shù)谋磉_(dá)方式是\b\w*t\b。所以建議大家盡可能使用代表小范圍的通配符(元字符)。

5 至于貪婪和懶惰啊,遞歸啊,這些在某些語(yǔ)言中有支持,但是這個(gè)因?yàn)檎Z(yǔ)言差異太大,本文不作詳述。

一些符號(hào)注意事項(xiàng)

1 - 連字符,這個(gè)只在字符組內(nèi)有特殊意義,在字符組外代表字符本身。

2 ^ 脫字符,在字符組內(nèi)的最前位置時(shí)表示排除的意思,在字符組內(nèi)的其它位置表示字符本身,在字符組外則是通配符,表示行首。

3 . $ * + ? { } ( ) | ,在字符組內(nèi)表示字符本身,在字符組外則是通配符或作用符。

4 字符組內(nèi),[ 和 ] 需要轉(zhuǎn)義

5 分組內(nèi),( 和 ) 需要轉(zhuǎn)義

正則表達(dá)式是記錄文本規(guī)則的代碼,主要的作用就是用于匹配文本。

語(yǔ)法:[內(nèi)容][次數(shù)]

1 我們把一個(gè)內(nèi)容和次數(shù)組成的塊叫小節(jié),那正則表達(dá)式就是由若干個(gè)小節(jié)構(gòu)成的。

2 內(nèi)容后如果不加次數(shù)代表內(nèi)容出現(xiàn)一次。

3 特定內(nèi)容(位置元字符)后不應(yīng)該跟次數(shù)。比如 ^ 和 $ 。

內(nèi)容可以是普通字符、元字符、邏輯表達(dá)式和引用。

元字符表

. 匹配除換行符以外的任意字符\w 匹配字母或數(shù)字或下劃線或漢字\s 匹配任意的空白符\d 匹配數(shù)字\b 匹配單詞的開(kāi)始或結(jié)束^ 匹配字符串的開(kāi)始$ 匹配字符串的結(jié)束\W 匹配任意不是字母,數(shù)字,下劃線,漢字的字符\S 匹配任意不是空白符的字符\D 匹配任意非數(shù)字的字符\B 匹配不是單詞開(kāi)頭或結(jié)束的位置

注意:其中\(zhòng)b、^、$、\B不代表任何字符位,他們代表一個(gè)位置,我們稱他們?yōu)槲恢迷址?#xff0c;其它元字符稱為占位元字符。

次數(shù)表

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

例:

\d{5} 可以匹配 99999\w*ing 可以匹配 doing\w+ing 可以匹配 doing\w{2}ing 也可以匹配 doing

邏輯表達(dá)式

我們把邏輯表達(dá)式劃分為組合、字符組、分組、多選。

組合

像 \w*ing 是由4個(gè)小節(jié)構(gòu)成的,分別是\w*、i、n、g。

字符組

[]中括號(hào)擴(kuò)起來(lái)的若干字符表示一個(gè)字符組,字符組內(nèi)的字符是"或"的關(guān)系。

字符組內(nèi)可使用連字符-。

注意:字符組后邊的次數(shù),一般用 + 而不用 *,因?yàn)樽址M后用 * 會(huì)匹配到出現(xiàn)0次的情況,這種情況會(huì)匹配到 \b 。

比如你想用字符組匹配2個(gè)單詞 int 或 argc,[(int)(argc)] 是錯(cuò)誤的,這個(gè)代表2個(gè)分組,而分組內(nèi)又是組合。集合內(nèi)不能識(shí)別分組,將小括號(hào)識(shí)別為普通字符。

看來(lái)結(jié)果將不符合你的預(yù)期,這種邏輯建議使用或來(lái)表述 \bint\b|\bargc\b。

例:

[int] 分別匹配字符i、n、t[0-9] 分別匹配0到9\b[int]+\b 可以匹配到單詞int、in、it

排除字符組

^ 表示排除

注意:如果你想在字符組內(nèi)使用排除法去匹配一個(gè)單詞(見(jiàn)下面的例子),建議你在集合內(nèi)加上 \W (大寫),否則空格和一些特殊字符也會(huì)被匹配到。

例:

[^x] 匹配除了x以外的任意字符。[^aeiou] 匹配除了aeiou這幾個(gè)字母以外的任意字符\b[^int\W]\b 匹配不出現(xiàn)字符i、n、t的單詞,如果不加 \W ,空格和一些特殊字符就不被排除

分組

()用小括號(hào)括起來(lái)的子表達(dá)式

例:

(\d{1,3}\.){3} 匹配999.999.999.

多選

| 表示"或"

注意:或的優(yōu)先級(jí)低于其它任何邏輯表達(dá)式。可使用分組來(lái)提高或的優(yōu)先級(jí)。

例:

\bint|argc\b 除了可以匹配到 int 或 argc,還可以匹配到 inta 或 hargc內(nèi)的部分字符\b(int|argc)\b 只匹配單詞 int 或 argc

轉(zhuǎn)義字符

\使用斜杠來(lái)顯現(xiàn)轉(zhuǎn)義字符。

所有的元字符、次數(shù)符、邏輯符號(hào)都需要轉(zhuǎn)義。

需轉(zhuǎn)義的字符有

\ . ^ $ * + ? { } [ ] ( ) |

后向引用

引用允許在后邊的表達(dá)式中引用前邊捕獲到的分組的文本。

分組被捕獲,然后用\斜杠加數(shù)字引用捕獲到的內(nèi)容。

命名捕獲在不同的語(yǔ)言中有不同的表示方法(Paython中使用(?P<name>group),.NET framework 中使用(?<name>group)),在這里不詳述。

例:

\b(\w+)\b\s+\1\b 捕獲像 go go, 或者kitty kitty 這樣的疊詞

零寬斷言

斷言是一種判斷,就是判斷是否符合斷言表達(dá)式,符合時(shí)才匹配其它內(nèi)容,不符合就不匹配。

注意:斷言的內(nèi)容不被匹配,這也是為什么它們被稱為零寬的原因。

零寬斷言不能單獨(dú)存在,必須與非零寬的表達(dá)式組合。

不是所有的工具都支持所有的零寬斷言。

斷言表達(dá)式

(?=exp) 匹配exp前面的位置(?<=exp) 匹配exp后面的位置(?!exp) 匹配后面跟的不是exp的位置(?<!exp) 匹配前面不是exp的位置

斷言分為正向斷言和負(fù)向斷言,上表前2個(gè)表達(dá)式是正向斷言,后2個(gè)表達(dá)式是負(fù)向斷言。

例:

\b\w+(?=ing\b) 匹配以ing結(jié)尾的單詞(?<=\bre)\w+\b 匹配以re開(kāi)頭的單詞\b((?!abc)\w)+\b 匹配不包含連續(xù)字符串a(chǎn)bc的單詞(?<![a-z])\d{7} 匹配前面不是小寫字母的七位數(shù)字

轉(zhuǎn)載于:https://www.cnblogs.com/the-capricornus/p/5643210.html

總結(jié)

以上是生活随笔為你收集整理的通用正则表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。