最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

正則表達(dá)式之字符組簡記法與字符組運(yùn)算

 更新時(shí)間:2023年05月28日 12:31:26   作者:gaara724  
這篇文章主要介紹了正則表達(dá)式之字符組簡記法與字符組運(yùn)算,用[0-9]、[a-z]等字符組,這里就為大家介紹一下,需要的朋友可以參考下

字符組簡記法

用[0-9]、[a-z]等字符組,可以很方便地表示數(shù)字字符和小寫字母字符。對(duì)于這類常用的字符組,正則表達(dá)式提供了更簡單的記法,這就是字符組簡記法(shorthands)。

常見的字符組簡記法有\(zhòng)d、\w、\s。從表面上看,它們與[…]完全沒聯(lián)系,其實(shí)是一致的。其中\(zhòng)d等價(jià)于[0-9],其中的d代表"數(shù)字(digit)";\w等價(jià)于[0-9a-zA-Z_],其中的w代表"單詞字符(word)";\s等價(jià)于[ \t\r\n\v\f](第一個(gè)字符是空格),s表示"空白字符(space)"。例1-17說明了這幾個(gè)字符組簡記法的典型匹配。

例1-17  字符組簡記法\d、\w、\s

#如果沒有原生字符串,\d就必須寫作\\d  
re.search(r"^\d$", "8") != None     #  => True  
re.search(r"^\d$", "a") != None     #  => False  
re.search(r"^\w$", "8") != None     #  => True  
re.search(r"^\w$", "a") != None     #  => True  
re.search(r"^\w$", "_") != None     #  => True  
re.search(r"^\s$", " ") != None     #  => True  
re.search(r"^\s$", "\t") != None    #  => True  
re.search(r"^\s$", "\n") != None    #  => True

一般印象中,單詞字符似乎只包含大小寫字母,但是字符組簡記法中的"單詞字符"不只有大小寫單詞,還包括數(shù)字字符和下畫線_,其中的下畫線_尤其值得注意:在進(jìn)行數(shù)據(jù)驗(yàn)證時(shí),有可能只容許輸入"數(shù)字和字母",有人會(huì)偷懶用\w驗(yàn)證,而忽略了\w能匹配下畫線,所以這種匹配并不嚴(yán)格,[0-9a-zA-Z]才是準(zhǔn)確的選擇。

"空白字符"并不難定義,它可以是空格字符、制表符\t,回車符\r,換行符\n等各種"空白"字符,只是不方便展現(xiàn)(因?yàn)轱@示和印刷出來都是空白)。不過這也提醒我們注意,匹配時(shí)看到的"空白"可能不是空格字符,因此,\s才是準(zhǔn)確的選擇。

字符組簡記法可以單獨(dú)出現(xiàn),也可以使用在字符組中,比如[0-9a-zA-Z]也可以寫作[\da-zA-Z],所以匹配十六進(jìn)制字符的字符組可以寫成[\da-fA-F]。字符組簡記法也可以用在排除型字符組中,比如[^0-9]就可以寫成[^\d][^0-9a-zA-Z_]就可以寫成[^\w],代碼如例1-18。

例1-18  字符組簡記法與普通字符組混用

#用在普通字符組內(nèi)部  
re.search(r"^[\da-zA-Z]$", "8") != None  #  => True  
re.search(r"^[\da-zA-Z]$", "a") != None  #  => True  
re.search(r"^[\da-zA-Z]$", "C") != None  #  => True  
#用在排除型字符組內(nèi)部  
re.search(r"^[^\w]$", "8") != None       #  => False  
re.search(r"^[^\w]$", "_") != None       #  => False  
re.search(r"^[^\w]$", ",") != None       #  => True

相對(duì)于\d、\w和\s這三個(gè)普通字符組簡記法,正則表達(dá)式也提供了對(duì)應(yīng)排除型字符組的簡記法:\D、\W和\S--字母完全一樣,只是改為大寫。這些簡記法匹配的字符互補(bǔ):\s能匹配的字符,\S一定不能匹配;\w能匹配的字符,\W一定不能匹配;\d能匹配的字符,\D一定不能匹配。例1-19示范了這幾個(gè)字符組簡記法的應(yīng)用。

例1-19  \D、\W、\S的使用

#\d和\D  
re.search(r"^\d$", "8") != None     #  => True  
re.search(r"^\d$", "a") != None     #  => False  
re.search(r"^\D$", "8") != None     #  => False  
re.search(r"^\D$", "a") != None     #  => True  
#\w和\W  
re.search(r"^\w$", "c") != None     #  => True  
re.search(r"^\w$", "!") != None     #  => False  
re.search(r"^\W$", "c") != None     #  => False  
re.search(r"^\W$", "!") != None     #  => True  
#\s和\S  
re.search(r"^\s$", "\t") != None    #  => True  
re.search(r"^\s$", "0") != None     #  => False  
re.search(r"^\S$", "\t") != None    #  => False  
re.search(r"^\S$", "0") != None     #  => True

妥善利用這種互補(bǔ)的屬性,可以得到一些非常巧妙的效果,最簡單的應(yīng)用就是字符組[\s\S]。初看起來,在同一個(gè)字符組中并列兩個(gè)互補(bǔ)的簡記法,這種做法有點(diǎn)奇怪,不過仔細(xì)想想就會(huì)明白,\s和\S組合在一起,匹配的就是"所有的字符"(或者叫"任意字符")。許多語言中的正則表達(dá)式并沒有直接提供"任意字符"的表示法,所以[\s\S]、[\w\W]、[\d\D]雖然看起來有點(diǎn)古怪,但確實(shí)可以匹配任意字符 。

關(guān)于字符組簡記法,最后需要補(bǔ)充兩點(diǎn):第一,如果字符組中出現(xiàn)了字符組簡記法,最好不要出現(xiàn)單獨(dú)的-,否則可能引起錯(cuò)誤,比如[\d-a]就很讓人迷惑,在有些語言中,-會(huì)被作為普通字符,而在有些語言中,這樣寫會(huì)報(bào)錯(cuò);第二,以上說的\d、\w、\s的匹配規(guī)則,都是針對(duì)ASCII編碼而言的,也叫ASCII匹配規(guī)則。但是,目前一些語言中的正則表達(dá)式已經(jīng)支持了Unicode字符,那么數(shù)字字符、單詞字符、空白字符的范圍,已經(jīng)不僅僅限于ASCII編碼中的字符。關(guān)于這個(gè)問題,具體細(xì)節(jié)在后文有詳細(xì)的介紹,如果你現(xiàn)在就想知道,可以翻到第115頁。

正則表達(dá)式——字符組運(yùn)算

以上介紹了字符組的基本功能,它們?cè)诔S玫恼Z言中都有提供;還有些語言中為字符組提供了更強(qiáng)大的功能,比如Java和.NET就提供了字符組運(yùn)算的功能,可以在字符組內(nèi)進(jìn)行集合運(yùn)算,在某些情況下這種功能非常實(shí)用。

如果要匹配所有的元音字母(為講解簡單考慮,暫時(shí)只考慮小寫字母的情況),可以用[aeiou],但是要匹配所有的輔音字母卻沒有什么方便的辦法,最直接的寫法是[b-df-hj-np-tv-z],不但煩瑣,而且難理解。其實(shí),從26個(gè)字母中"減去"元音字母,剩下的就是輔音字母,如果有辦法做這個(gè)"減法",就方便多了。

Java語言中提供了這樣的字符組:[[a-z]&&[^aeiou]],雖然初看有點(diǎn)古怪,但仔細(xì)看看,也不難理解。[a-z]表示26個(gè)英文字母,[^aeiou]表示除元音字母之外的所有字符(還包括大寫字母、數(shù)字和各種符號(hào)),兩者取交集,就得到"26個(gè)英文字母中,除去5個(gè)元音字母,剩下的21個(gè)輔音字母"。

.NET中也有這樣的功能,只是寫法不一樣。同樣是匹配輔音字母的字符組,.NET中寫作[a-z-[aeiou]],其邏輯是:從[a-z]能匹配的26個(gè)字符中,"減去"[aeiou]能匹配的元音字母。相對(duì)于Java,這種邏輯更符合直覺,但寫法卻有點(diǎn)古怪--不是[[a-z]-[aeiou]],而是[a-z-[aeiou]]。例1-20集中演示了Java和.NET中的字符組運(yùn)算。

例1-20  字符組運(yùn)算

// Java  
"a".matches("^[[a-z]&&[^aeiou]]$");     //  => True  False
"b".matches("^[[a-z]&&[^aeiou]]$");     //  => False True
// .NET  
Regex.IsMatch("^[a-z-[aeiou]]$", "a");  //  => True  False
Regex.IsMatch("^[a-z-[aeiou]]$", "b");  //  => False True*紅色為更正

到此這篇關(guān)于正則表達(dá)式之字符組簡記法與字符組運(yùn)算的文章就介紹到這了,更多相關(guān)正則字符組簡記法與運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 瀏覽器中的正則表達(dá)式陷阱說明

    瀏覽器中的正則表達(dá)式陷阱說明

    js 內(nèi)置對(duì)象 RegExp 我們用的很習(xí)慣 也很舒服 但是里面卻有 嚴(yán)重的隱患 或者陷阱...原因在于 有些瀏覽器 對(duì)正則表達(dá)式直接量的優(yōu)化.
    2010-05-05
  • 正則表達(dá)式進(jìn)行頁面表單驗(yàn)證功能

    正則表達(dá)式進(jìn)行頁面表單驗(yàn)證功能

    一般做到注冊(cè)頁面的時(shí)候,當(dāng)用戶填完信息,都需要對(duì)他們的信息進(jìn)行驗(yàn)證,這就要用到正則表達(dá)式。本文通過實(shí)例給大家介紹正則表達(dá)式進(jìn)行頁面表單驗(yàn)證功能,一起看看吧
    2017-03-03
  • 正則表達(dá)式m修飾符(多行匹配)

    正則表達(dá)式m修飾符(多行匹配)

    m修飾符規(guī)定正則表達(dá)式可以執(zhí)行多行匹配,在默認(rèn)狀態(tài)下,一個(gè)字符串無論是否換行只有一個(gè)開始^和結(jié)尾$,如果采用多行匹配,那么每一個(gè)行都有一個(gè)^和結(jié)尾$
    2016-12-12
  • Android中手機(jī)號(hào)、車牌號(hào)正則表達(dá)式大全

    Android中手機(jī)號(hào)、車牌號(hào)正則表達(dá)式大全

    這篇文章主要介紹了Android中手機(jī)號(hào)、車牌號(hào)正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • 精通JS正則表達(dá)式(推薦)

    精通JS正則表達(dá)式(推薦)

    精通JS正則表達(dá)式,講的比較詳細(xì),學(xué)習(xí)正則表達(dá)式的朋友可以參考下。
    2010-11-11
  • UNIX/LINUX SHELL 正則表達(dá)式語法詳解附使用方法

    UNIX/LINUX SHELL 正則表達(dá)式語法詳解附使用方法

    一個(gè)正則表達(dá)式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時(shí)待匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配
    2019-11-11
  • 半小時(shí)精通正則表達(dá)式 經(jīng)典實(shí)例介紹

    半小時(shí)精通正則表達(dá)式 經(jīng)典實(shí)例介紹

    想必很多人都對(duì)正則表達(dá)式都頭疼.今天,我以我的認(rèn)識(shí),加上網(wǎng)上一些文章,希望用常人都可以理解的表達(dá)方式.來和大家分享學(xué)習(xí)經(jīng)驗(yàn)
    2012-09-09
  • 通過正則表達(dá)式驗(yàn)證IP和端口格式的正確性

    通過正則表達(dá)式驗(yàn)證IP和端口格式的正確性

    這篇文章主要介紹了正則表達(dá)式驗(yàn)證IP和端口格式的正確性,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • javascript中使用正則表達(dá)式進(jìn)行字符串驗(yàn)證示例

    javascript中使用正則表達(dá)式進(jìn)行字符串驗(yàn)證示例

    我寫的一個(gè)表達(dá)式驗(yàn)證示例:功能如下:用戶名,不能為空;密碼6為數(shù)字;密碼確認(rèn),兩次輸入密碼必須相同;身份證號(hào)碼必須是15位,或者是18位,最末尾也可以是X
    2013-05-05
  • Kotlin版正則表達(dá)式及其常見使用代碼舉例

    Kotlin版正則表達(dá)式及其常見使用代碼舉例

    正則表達(dá)式是處理字符串的強(qiáng)大工具,Kotlin 提供了便捷的 API 支持正則表達(dá)式的使用,這篇文章主要介紹了Kotlin版正則表達(dá)式及其常見使用代碼舉例的相關(guān)資料,需要的朋友可以參考下
    2026-05-05

最新評(píng)論

佛教| 涿州市| 九江县| 合山市| 梅州市| 清远市| 高唐县| 多伦县| 诸城市| 浠水县| 南漳县| 尼勒克县| 凯里市| 武安市| 临江市| 京山县| 乐平市| 龙泉市| 盘山县| 循化| 大同县| 怀来县| 皮山县| 阳山县| 浮梁县| 恭城| 宾川县| 贵州省| 十堰市| 龙南县| 屏边| 慈利县| 广昌县| 盐池县| 顺昌县| 石楼县| 郓城县| 女性| 思茅市| 普兰店市| 资中县|