一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 正則表達式 - 十分鐘上手正則表達式 下篇

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

2021-11-17 15:22滌生手記 正則表達式

正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等

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

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

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

一、正則表達式常用符號

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

1.1 問號【?】

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

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

腳本解說:

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

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

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

腳本解說:

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

1.2 加號【+】

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

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

示例解說:

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

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

腳本解讀:

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

1.3 花括號{}

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

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

這個特性可以精確調整字符或字符集在模式中具體出現的次數。

重點說明:

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

示例:

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

示例解讀:

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

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

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

示例解讀:

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

下面是字符組的示例:

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

示例解讀:

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

1.4 管道符號【|】

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

使用格式:

expr1 |expr2|...

示例:

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

示例解讀:

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

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

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

示例解讀:

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

1.5 小括號()

正則表達式模式也可以用圓括號進行分組。當將正則表達式模式分組時,該組會被視為一個標準字符。可以像對普通字符一樣給該組使用特殊字符。

示例:

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

示例解讀:

結尾的 urday 分組以及問號,使得模式能夠匹配完整的 saturday 或縮寫 sat 。

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

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

示例解讀:

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

二、正則表達式實戰示例

示例1:

下面會有一個腳本,功能是對path環境變量中定義的目錄里的可執行文件進行計數。

腳本內容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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

執行結果:

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

示例2:

正則表達式解析郵件地址

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

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

^([a-za-z0-9_\-\.\+]+)@

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

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

([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

?
1
2
3
#!/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命令行選項。

示例測試腳本:

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

示例解讀:

符合規則的郵件名會打印在屏幕,不符合的會被過濾掉,不會有內容輸出。

到此這篇關于十分鐘上手正則表達式 下篇的文章就介紹到這了,更多相關正則表達式 入門內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_26442553/article/details/120724293

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: yellow最新视频2019 | 久久亚洲电影www电影网 | 欧美成人三级伦在线观看 | 暖暖在线精品日本中文 | 国产精品suv一区二区 | 国产成人精品第一区二区 | 北海市副市长黄江老公 | 四虎院影永久在线观看 | 交换朋友夫妇3中文字幕 | 青青久久久国产线免观 | 国产99在线观看 | free性泰国女人hd | 国产成人一区二区三区视频免费蜜 | 国产一成人精品福利网站 | jizzjizz大学生 | 国产亚洲成归v人片在线观看 | 2021最新国产成人精品免费 | 日本人与黑人做爰视频网站 | 免费91麻豆精品国产自产在线观看 | 四虎免费影院4hu永久免费 | 18未年禁止免费观看 | 日本欧美不卡一区二区三区在线 | 3x免费高清视频 | 乳女教师欲乱动漫无修版动画3d | 探花国产 | 免费观看一级特黄三大片视频 | 91麻豆精品激情在线观看最新 | 7mav视频| 国产精品成人一区二区1 | 免费看伦理片 | 视频在线欧美 | 999久久免费高清热精品 | 91噜噜噜在线观看 | 毛片免费观看 | 范冰冰a级一级特级毛片 | 校服下的白嫩小乳尖h1v1 | 亚洲国产精品免费在线观看 | 男人最爱看的网站 | 99热国产在线 | 欧美一级特黄特色大片免费 | 国产一区在线看 |