免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
02.正則表達(dá)式

準(zhǔn)備:

—安裝RegExpBuddy軟件——專門測(cè)試正則表達(dá)式是否正確的軟件

—或是找一個(gè)正則表達(dá)式在線測(cè)試網(wǎng)站

1.正則表達(dá)式——Regular Expression

什么是:

  正則表達(dá)式,是專門描述字符串中字符出現(xiàn)規(guī)則的表達(dá)式。

為什么:

  因?yàn)槌绦虿徽J(rèn)識(shí)人類語言中的詞匯,所以才需要程序員用正則表達(dá)式教程序認(rèn)識(shí)人類語言中的詞匯。

可用于:

  1.驗(yàn)證字符串格式

  2.查找敏感詞

定義正則表達(dá)式:

  (1).普通字符

   所有的單個(gè)大小寫字母、數(shù)字都是一個(gè)正則表達(dá)式,用以匹配單個(gè)字符,這個(gè)字符與它本身相同,簡(jiǎn)單來講,就是一個(gè)關(guān)鍵詞原文。

   —例如:"我是"

  

關(guān)鍵詞匹配的過程:

  

在RegExp Buddy中

—查找一句話中是否包含敏感詞“我是”

—如果將一句話中的“我是”,換成“我事”,還能查詢出來嗎?

(2).字符集

問題:

  第二個(gè)字符換成另一個(gè)同音字,就匹配不到了

解決:

  字符集

什么是:

—字符集是規(guī)定一位字符上多種備選字的列表

—只要規(guī)則中某一位字符上有多種備選字時(shí),就用字符集

如何:

  [備選字列表]

例如:

  匹配時(shí),只要與[]中任意一個(gè)字符匹配,就算滿足規(guī)則

字符集匹配過程:

  

如果再連上前邊寫死的“我”字規(guī)則,可匹配種詞:

  

在RegExp Buddy中

—定義一個(gè)規(guī)則同時(shí)匹配“我是” ,“我事” ,“我時(shí)” 三種敏感詞

答案: [是時(shí)事]

—擴(kuò)展:修改規(guī)則,使其進(jìn)一步匹配“臥是”

答案: [我臥][是時(shí)事]

—[我臥][是事時(shí)]匹配過程: 

  

再例如:

常用手機(jī)號(hào)規(guī)則:

— 第一位:1

— 第二位:3、4、5、6、7、8、9中選其中一個(gè)

— 后 9位:每一位上都是在0~9數(shù)字之間任選其一

—結(jié)果:

  

問題:

  如果每個(gè)數(shù)字都寫很麻煩。

解決:

  簡(jiǎn)寫:如果[]中部分備選字符連續(xù),可以使用-省略中間字符

例如:

          手機(jī)號(hào)規(guī)則中:

[3456789] 可簡(jiǎn)寫為 [3-9] 讀作 39

[0123456789] 可簡(jiǎn)寫為 [0-9] 讀作 09

  所以,手機(jī)簡(jiǎn)寫形式:

    1[3-8][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]

  

其它簡(jiǎn)寫:

要匹配 一位小寫 字母 : [a-z]             26個(gè)

要匹配 一位大寫 字母 : [A-Z]             26個(gè)

要  匹  配 一 位 字 母 : [A-Za-z]        52個(gè)

要匹配一位字母或數(shù)字:[0-9A-Za-z]    62個(gè)

要  匹  配  一 位 漢 字:[\u4e00-\u9fa5]

                                 19968 ~ 40869  20902個(gè)

使用字符集簡(jiǎn)寫:

在RegExp Buddy中

  

—利用字符集簡(jiǎn)寫定義車牌號(hào)規(guī)則:

— 第一位:1位漢字

— 第二位:1位大寫字母

— 第三位:·

— 后五位:每一位都是一位大寫字母或數(shù)字

答案:

  [\u4e00-\u9fa5][A-Z]·[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]

 

(3).預(yù)定義字符集

正則表達(dá)式語法為四種最常用的字符集定義了最簡(jiǎn)化寫法,稱為預(yù)定義字符集。

包括:

要  匹  配  一  位  數(shù) 字  : \d   等效于   [0-9]  

要匹配一位字母、數(shù)字或_:  \w   等效于   [0-9A-Za-z_]

要  匹 配 一 位 空 字  符 :\s    可匹配  空格、制表符、Tab等空白

要匹配所有文字 (通配符) : .  

所以,利用預(yù)定義字符集簡(jiǎn)寫手機(jī)號(hào)規(guī)則為:

  1[3-8]\d\d\d\d\d\d\d\d\d

  

問題:  

  手機(jī)號(hào)規(guī)則中\d寫了9遍,車牌號(hào)規(guī)則中[0-9A-Z]也寫了五遍,也很不方便。

原因:

  一個(gè)字符集(\d[0-9])只能匹配一位字符,要匹配9位字符,就必須重復(fù)寫9遍。

  程序用規(guī)則匹配字符串,就像彩票兌獎(jiǎng)一樣,是逐字逐個(gè)規(guī)則匹配。

  不但內(nèi)容要符合規(guī)則,位數(shù)首先要一致。

  [\u4e00-\u9fa5][A-Z]·[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]

解決:

  使用數(shù)量詞。

(4).數(shù)量詞

什么是:

  數(shù)量詞,是專門規(guī)定一個(gè)字符集出現(xiàn)次數(shù)的規(guī)則

何時(shí):

  今后,只要一個(gè)字符集在規(guī)則中可能連續(xù)反復(fù)出現(xiàn)多次,就要用數(shù)量詞以簡(jiǎn)寫方式定義出現(xiàn)次數(shù)。

如何:

  數(shù)量詞緊跟在其修飾的字符集之后,默認(rèn)修飾相鄰的前一個(gè)字符集

例如:

  利用數(shù)量詞進(jìn)一步簡(jiǎn)寫手機(jī)號(hào)規(guī)則中,可進(jìn)一步簡(jiǎn)寫為:

     1[3-8]\d{9}     \d{9} 相當(dāng)于 \d*9次

     

使用數(shù)量詞:

利用數(shù)量詞進(jìn)一步簡(jiǎn)寫車牌號(hào)規(guī)則,可進(jìn)一步簡(jiǎn)寫為:

   [\u4e00-\u9fa5][A-Z]·[0-9A-Z]{5}

  

 

問題:

  接收短信驗(yàn)證碼時(shí),網(wǎng)站驗(yàn)證碼有時(shí)4位,有時(shí)6位,并不確定,怎么辦?

其實(shí),數(shù)量詞包括兩大類:

1). 有明確數(shù)量邊界的數(shù)量詞

字符集{n}      表示字符集必須重復(fù)n次,不能多也不能少

例如:

  \d{4,6}  表示4位數(shù)字

  

字符集{n,m}   表示字符集至少重復(fù)n次,最多重復(fù)m次,

例如:  

  \d{4,6}   表示4到6位數(shù)字

  

      字符集{n,}     表示字符集匹配的內(nèi)容至少重復(fù)n次,多了不限

  例如:

    \d{6,}     表示6位以上數(shù)字

    

2). 沒有明確數(shù)量邊界的數(shù)量詞

    表示可有可無,多了不限

    \s*

    

+  表示至少一次,多了不限

  \s+ 

  

?  表示可有可無,最多一次

  \s?

  

在RegExp Buddy中

—匹配手機(jī)短信中的驗(yàn)證碼:連續(xù)的4~6位數(shù)字

答案: \d{4,6}

—匹配字符串中的一組連續(xù)空字符

答案: \s+

(5).選擇和分組

問題:

  屏蔽敏感詞時(shí),輸入者把字換成拼音就查不出來了

錯(cuò)誤的做法:

  直接將拼音放入[]中作為字符集中的備選

  比如:

    [cao]

    

希望:

  草 或 cao

  

原因:

  字符集只認(rèn)識(shí)單個(gè)字,不認(rèn)識(shí)一組拼音

  

正確做法:

  1).選擇

什么是:

  選擇,是指在多個(gè)子規(guī)則中選其一匹配

何時(shí):

  今后,只要在多個(gè)子規(guī)則中選其一匹配時(shí),就用選擇

如何:     

  子規(guī)則1   |   子規(guī)則2  

讀作:  

  滿足規(guī)則1    滿足規(guī)則2

例如:

  草 | cao

問題:

  如果規(guī)則寫成“我草|cao” 呢?

希望是:

  我草 cao

  

實(shí)際卻是:

  我草 | cao

  

原因:

因?yàn)?ldquo;|”選擇符只分左右,不考慮單個(gè)字符  

解決:

使用分組。

2).分組

什么是:

  分組,將多個(gè)子規(guī)則視為一組,再和分組外的規(guī)則匹配

何時(shí):

  只要希望將多個(gè)子規(guī)則視為一個(gè)整體,再和其它規(guī)則匹配時(shí),就用分組

如何:

  其它規(guī)則(多個(gè)子規(guī)則)

例如:

  —匹配一個(gè)“草” 字或“cao”這個(gè)拼音

  答案: |cao

  

  —匹配“我草”或“我cao

答案: (|cao)

使用選擇和分組:

問題1:

  同時(shí)驗(yàn)證敏感字同音字或拼音,我草、我艸、我cao、我槽

答案:我 ([草艸槽]|cao)

問題2:

  “我” 字也可能是“臥”或“wo

  答案:([我臥]|wo)([草艸槽]|cao)

  

問題3:

  可能在中間加不確定個(gè)數(shù)的空字符:

答案:([我臥]|wo)\s*([草艸槽]|cao)

在RegExp Buddy中定義規(guī)則

—匹配“我草”

  

—匹配 “臥    槽”

  

—匹配wocao”,“我  草”等敏感詞

  

—定義完整手機(jī)號(hào)規(guī)則:

          分析:

+86或0086:(\+86|0086)

至少一個(gè)空字符 : \s+

之前所有,整體可有可無,最多一次: ()?

1

3~9

任選其一 9位數(shù)字

  答案: ((\+86|0086)\s+)?1[3-8]\d{9}

  

—定義完整身份證號(hào)規(guī)則:

分析:

    15位數(shù)字: \d{15}    (一代身份證)

    2位數(shù)字:  \d\d

    最后一位: 1位數(shù)字或Ⅹ:   [0-9Ⅹ]

    最后三位 可有可無,最多一次 (最后三位)?

答案:\d{15}(\d\d[0-9x])?

    

(6).指定匹配位置

一個(gè)字符串中三個(gè)位置比較特殊:

—1. 字符串開頭

—2. 字符串結(jié)尾

—3. 英文句子中的每個(gè)單詞中間的空白位置

  

如果只希望匹配特殊位置上的關(guān)鍵詞時(shí),就可用特殊符號(hào)表示特殊位置。

包括:

—1. ^ 表示字符串開頭

—2. $ 表示字符串結(jié)尾

—3. \b 表示單詞邊界,可匹配:空格,標(biāo)點(diǎn)符號(hào),字符串開頭和結(jié)尾等可將一個(gè)單詞與其它單詞分割開的符號(hào)。

  

例如:

  匹配一組連續(xù)的空字符

—1. 匹配任意一組連續(xù)的空字符

  

—2. 僅匹配開頭的空字

  

—3. 僅匹配結(jié)尾的空字符

  

—4. 同時(shí)匹配開頭和結(jié)尾的空字符:

  錯(cuò)誤的做法:

     ^\s+$,表示從開頭到結(jié)尾之間只能是空字符!

    

      正確做法:

        |”選擇符,將整個(gè)規(guī)則強(qiáng)行一分為2

        

再比如:

  找到每個(gè)單詞首字母

    —前邊緊挨著單詞邊界的字母

      

附圖片(不與博客內(nèi)容匹配,僅參考):

  

  

  

  

  

  

英文單詞整理
Regular  Expression 正則表達(dá)式
Regular            規(guī)則
Expression       表達(dá)式 做一件事的一條程序的語句
\d    digit         (從 0 到 9 的任何一個(gè))數(shù)字,數(shù)位
\s    space       (可利用的)空地,空間;空格
\w   word         單詞;詞;字;
\b    boundary   邊界

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASCII字符集中的功能/控制字符
收集48條常用正則式
【Redis底層解析】字符串類型
.htaccess:正則表達(dá)式、重定向代碼
如何顯示和輸入七萬多漢字
字符集和字符編碼
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服