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

十分鐘上手正則表達式 下篇

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

前面,我們就正則表達式一些常用的基本方法做了詳細的介紹,本篇會講解一些拓展性的知識,主要的就是常見的ERE模式符號以及shell腳本中常見的一些正則表達式例子。

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

一、正則表達式常用符號

本章示例著重于在gawk程序腳本中的較常見的ERE模式符號。

1.1 問號【?】

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

腳本解說:

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

和星號一樣,可以將問號和字符組一起使用。

腳本解說:

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

1.2 加號【+】

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

示例解說:

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

腳本解讀:

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

1.3 花括號{}

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

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

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

重點說明:

默認情況下, gawk 程序不會識別正則表達式間隔。必須指定 gawk 程序的 --re- interval 命令行選項才能識別正則表達式間隔。

示例:

示例解讀:

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

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

示例解讀:

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

下面是字符組的示例:

示例解讀:

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

1.4 管道符號【|】

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

使用格式:

expr1 |expr2|...

示例:

示例解讀:

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

管道符號兩側(cè)的正則表達式可以采用任何正則表達式模式(包括字符組)來定義文本??聪旅媸纠?/p>

示例解讀:

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

1.5 小括號()

正則表達式模式也可以用圓括號進行分組。當將正則表達式模式分組時,該組會被視為一個標準字符??梢韵駥ζ胀ㄗ址粯咏o該組使用特殊字符。

示例:

示例解讀:

結(jié)尾的 urday 分組以及問號,使得模式能夠匹配完整的 Saturday 或縮寫 Sat 。

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

示例解讀:

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

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

示例1:

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

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

#!/bin/bash 
# count number of files in your PATH 
 
mypath=$(echo $PATH | sed 's/:/ /g') #用空格來替換冒號,分割路徑
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:

正則表達式解析郵件地址

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

過濾用戶名中表達式模式。

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

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

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

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

頂級域名用的正則表達式模式:

\.([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程序中使用正則表達式間隔時,必須使用--re-interval命令行選項。

示例測試腳本:

示例解讀:

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

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

相關(guān)文章

  • EditPlus中的正則表達式實戰(zhàn)(6)

    EditPlus中的正則表達式實戰(zhàn)(6)

    這篇文章主要介紹了EditPlus中的正則表達式及語義分析,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2016-12-12
  • Oracle正則表達式使用介紹

    Oracle正則表達式使用介紹

    正則表達式具有強大、便捷、高效的文本處理功能。能夠添加、刪除、分析、疊加、插入和修整各種類型的文本和數(shù)據(jù)。Oracle從10g開始支持正則表達式
    2012-09-09
  • 史上最詳細的js日期正則表達式分享

    史上最詳細的js日期正則表達式分享

    最近項目經(jīng)常要用到日期的正則表達式,就上度娘查了下,整理出來,分享給大家
    2014-06-06
  • PHP 正則 email語句詳解

    PHP 正則 email語句詳解

    PHP正則校驗email的代碼相信好好學(xué)過PHP的人都應(yīng)該知道下面這段用于eamil校驗的語句,但是真正能看懂的就不多了。
    2009-10-10
  • JavaScript正則表達式校驗非零的正整數(shù)實例

    JavaScript正則表達式校驗非零的正整數(shù)實例

    本文分享了JavaScript正則表達式(^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$)校驗非零的正整數(shù)實例代碼,代碼簡單易懂,需要的朋友可以看下
    2016-12-12
  • PHP中的遞歸正則表達式用法分享

    PHP中的遞歸正則表達式用法分享

    其實很多語言中的正則表達式都是支持遞歸的, 本文主要介紹PHP的正則遞歸. 雖然, 工作中最常用的正則表達式都很普通, 只用最基本的語法就能解決85%以上的問題, 而且合理有效地使用普通正則來解決復(fù)雜問題也是一門技巧與學(xué)問,但是更高級一點的語法的確有它存在的價值,看下面具體介紹
    2012-09-09
  • asp 圖片正則 替換,替換前檢查圖片是不是本地地址的方法

    asp 圖片正則 替換,替換前檢查圖片是不是本地地址的方法

    這個圖片正則先檢查圖片的地址,不是本地的則用本地的asp突破盜鏈,方便使用,注意是答chinaz的朋友問的一個問題
    2008-08-08
  • 正則表達式基礎(chǔ)入門

    正則表達式基礎(chǔ)入門

    正則表達式是煩瑣的,但是強大的,學(xué)會之后的應(yīng)用會讓你除了提高效率外,會給你帶來絕對的成就感。只要認真去閱讀這些資料,加上應(yīng)用的時候進行一定的參考,掌握正則表達式不是問題
    2006-10-10
  • javascript正則表達式和字符串RegExp and String(一)

    javascript正則表達式和字符串RegExp and String(一)

    這篇文章主要介紹了javascript正則表達式和字符串RegExp and String(一)的相關(guān)資料,需要的朋友可以參考下
    2015-10-10
  • 可以少寫1000行代碼的正則表達式

    可以少寫1000行代碼的正則表達式

    正則表達式,一個十分古老而又強大的文本處理工具,僅僅用一段非常簡短的表達式語句,便能夠快速實現(xiàn)一個非常復(fù)雜的業(yè)務(wù)邏輯。知道這20個正則表達式,能讓你少寫1000行代碼,想知道嗎
    2016-04-04

最新評論

亚东县| 城步| 中西区| 舟山市| 武胜县| 沁水县| 新密市| 安徽省| 青州市| 桐梓县| 淅川县| 宁波市| 齐齐哈尔市| 绵竹市| 蒲城县| 周至县| 金山区| 凤凰县| 康平县| 遵义县| 连云港市| 丰县| 西和县| 屏山县| 岳阳市| 安庆市| 当雄县| 南溪县| 手游| 商南县| 潞西市| 武义县| 达日县| 驻马店市| 临汾市| 平江县| 东兴市| 略阳县| 双城市| 如东县| 方山县|