欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

十分鐘上手正則表達(dá)式 下篇

 更新時(shí)間:2021年10月13日 15:11:20   作者:滌生手記  
正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等

前面,我們就正則表達(dá)式一些常用的基本方法做了詳細(xì)的介紹,本篇會(huì)講解一些拓展性的知識(shí),主要的就是常見(jiàn)的ERE模式符號(hào)以及shell腳本中常見(jiàn)的一些正則表達(dá)式例子。

快速學(xué)習(xí)正則表達(dá)式,不用死記硬背,示例讓你通透(上篇)

一、正則表達(dá)式常用符號(hào)

本章示例著重于在gawk程序腳本中的較常見(jiàn)的ERE模式符號(hào)。

1.1 問(wèn)號(hào)【?】

問(wèn)號(hào)類似于星號(hào),不過(guò)有點(diǎn)細(xì)微的不同。問(wèn)號(hào)表明前面的字符可以出現(xiàn) 0 次或 1 次,但只限于 此。它不會(huì)匹配多次出現(xiàn)的字符。 示例展示:

腳本解說(shuō):

如果字符 e 并未在文本中出現(xiàn),或者它只在文本中出現(xiàn)了 1 次,那么模式會(huì)匹配。

和星號(hào)一樣,可以將問(wèn)號(hào)和字符組一起使用。

腳本解說(shuō):

如果字符組中的字符出現(xiàn)了 0 次或 1 次,模式匹配就成立。但如果兩個(gè)字符都出現(xiàn)了,或者其中一個(gè)字符出現(xiàn)了2 次,模式匹配就不成立。

1.2 加號(hào)【+】

加號(hào)是類似于星號(hào)的另一個(gè)模式符號(hào),但跟問(wèn)號(hào)也有不同。加號(hào)表明前面的字符可以出現(xiàn) 1次或多次,但必須至少出現(xiàn)1 次。如果該字符沒(méi)有出現(xiàn),那么模式就不會(huì)匹配。

示例解說(shuō):

如果字符 e 沒(méi)有出現(xiàn),模式匹配就不成立。加號(hào)同樣適用于字符組,與星號(hào)和問(wèn)號(hào)的使用方式相同。

腳本解讀:

如果字符組中定義的任一字符出現(xiàn)了,文本就會(huì)匹配指定的模式。

1.3 花括號(hào){}

ERE 中的花括號(hào)允許為可重復(fù)的正則表達(dá)式指定一個(gè)上限。這通常稱為 間隔 ( interval )。 可以用兩種格式來(lái)指定區(qū)間。

  • m:正則表達(dá)式準(zhǔn)確出現(xiàn)m次。
  • m, n:正則表達(dá)式至少出現(xiàn)m次,至多n次。

這個(gè)特性可以精確調(diào)整字符或字符集在模式中具體出現(xiàn)的次數(shù)。

重點(diǎn)說(shuō)明:

默認(rèn)情況下, gawk 程序不會(huì)識(shí)別正則表達(dá)式間隔。必須指定 gawk 程序的 --re- interval 命令行選項(xiàng)才能識(shí)別正則表達(dá)式間隔。

示例:

示例解讀:

通過(guò)指定間隔為 1 ,限定了該字符在匹配模式的字符串中出現(xiàn)的次數(shù)。如果該字符出現(xiàn)多次, 模式匹配就不成立。

同樣也可以指定上限和下限

示例解讀:

字符 e 可以出現(xiàn) 1 次或 2 次,這樣模式就能匹配;否則,模式無(wú)法匹配。

下面是字符組的示例:

示例解讀:

如果字母 a 或 e 在文本模式中只出現(xiàn)了 1~2 次,則正則表達(dá)式模式匹配;否則,模式匹配失敗。

1.4 管道符號(hào)【|】

管道符號(hào)允許在檢查數(shù)據(jù)流時(shí),用邏輯 OR 方式指定正則表達(dá)式引擎要用的兩個(gè)或多個(gè)模式。如果任何一個(gè)模式匹配了數(shù)據(jù)流文本,文本就通過(guò)測(cè)試。如果沒(méi)有模式匹配,則數(shù)據(jù)流文本匹配失敗。

使用格式:

expr1 |expr2|...

示例:

示例解讀:

這個(gè)例子會(huì)在數(shù)據(jù)流中查找正則表達(dá)式 cat 或 dog 。正則表達(dá)式和管道符號(hào)之間不能有空格, 否則它們也會(huì)被認(rèn)為是正則表達(dá)式模式的一部分。

管道符號(hào)兩側(cè)的正則表達(dá)式可以采用任何正則表達(dá)式模式(包括字符組)來(lái)定義文本。看下面示例:

示例解讀:

這個(gè)例子會(huì)匹配數(shù)據(jù)流文本中的 cat 、 hat 或 dog 。

1.5 小括號(hào)()

正則表達(dá)式模式也可以用圓括號(hào)進(jìn)行分組。當(dāng)將正則表達(dá)式模式分組時(shí),該組會(huì)被視為一個(gè)標(biāo)準(zhǔn)字符??梢韵駥?duì)普通字符一樣給該組使用特殊字符。

示例:

示例解讀:

結(jié)尾的 urday 分組以及問(wèn)號(hào),使得模式能夠匹配完整的 Saturday 或縮寫(xiě) Sat 。

將分組和管道符號(hào)一起使用來(lái)創(chuàng)建可能的模式匹配組是很常見(jiàn)的做法。如下示例:

示例解讀:

模式 (c|b)a(b|t) 會(huì)匹配第一組中字母的任意組合以及第二組中字母的任意組合。

二、正則表達(dá)式實(shí)戰(zhàn)示例

示例1:

下面會(huì)有一個(gè)腳本,功能是對(duì)PATH環(huán)境變量中定義的目錄里的可執(zhí)行文件進(jìn)行計(jì)數(shù)。

腳本內(nèi)容如下:

#!/bin/bash 
# count number of files in your PATH 
 
mypath=$(echo $PATH | sed 's/:/ /g') #用空格來(lái)替換冒號(hào),分割路徑
count=0 
for directory in $mypath 
do 
 check=$(ls $directory) 
 for item in $check 
 do 
 count=$[ $count + 1 ] 
 done 
 echo "$directory - $count" 
 count=0 
done

執(zhí)行結(jié)果:

示例2:

正則表達(dá)式解析郵件地址

郵件地址的基本格式為:username@hostname
username值可用字母數(shù)字字符以及以下特殊字符:(點(diǎn)號(hào)、單破折線、 加號(hào)、 下劃線)
在有效的郵件用戶名中,這些字符可能以任意組合形式出現(xiàn)。郵件地址的hostname部分由一個(gè)或多個(gè)域名和一個(gè)服務(wù)器名組成。服務(wù)器名和域名也必須遵照嚴(yán)格的命名規(guī)則,只允許字母數(shù)字字符以及以下特殊字符:(點(diǎn)號(hào)、下劃線)
服務(wù)器名和域名都用點(diǎn)分隔,先指定服務(wù)器名,緊接著指定子域名,最后是后面不帶點(diǎn)號(hào)的
頂級(jí)域名。
頂級(jí)域名的數(shù)量在過(guò)去十分有限,正則表達(dá)式模式編寫(xiě)者會(huì)嘗試將它們都加到驗(yàn)證模式中。
然而遺憾的是,隨著互聯(lián)網(wǎng)的發(fā)展,可用的頂級(jí)域名也增多了。這種方法已經(jīng)不再可行。
從左側(cè)開(kāi)始構(gòu)建這個(gè)正則表達(dá)式模式。

過(guò)濾用戶名中表達(dá)式模式。

^([a-zA-Z0-9_\-\.\+]+)@

這個(gè)分組指定了用戶名中允許的字符,加號(hào)表明必須有至少一個(gè)字符。下一個(gè)字符很明顯是@。

hostname模式使用同樣的方法來(lái)匹配服務(wù)器名和子域名:

([a-zA-Z0-9_\-\.]+)

頂級(jí)域名用的正則表達(dá)式模式:

\.([a-zA-Z]{2,5})$

整體組合模式:

^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$

封裝到腳本中:

cat isemail.sh

#!/bin/bash 
# script to filter out bad phone numbers 
awk --re-interval '/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})/{print $0}'

注意:在awk程序中使用正則表達(dá)式間隔時(shí),必須使用--re-interval命令行選項(xiàng)。

示例測(cè)試腳本:

示例解讀:

符合規(guī)則的郵件名會(huì)打印在屏幕,不符合的會(huì)被過(guò)濾掉,不會(huì)有內(nèi)容輸出。

到此這篇關(guān)于十分鐘上手正則表達(dá)式 下篇的文章就介紹到這了,更多相關(guān)正則表達(dá)式 入門(mén)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論