日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式基础知识及应用(用于个人学习以及回顾)

發布時間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式基础知识及应用(用于个人学习以及回顾) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 正則表達式概述

正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為"元字符")。

正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。

總的來說,正則表達式是使用“一串符號”來描述有共同屬性的數據。


二. 正則表達式在Linux中使用

Linux中可使用egrep+正則表達式來進行你想要的過濾。

egrep過濾工具

?? 2.1 文本處理順序

  • 以行為單位,逐漸進行處理

  • 默認只輸出與表達式相匹配的文本行

?? 2.2 基本用法

  • 格式1:egrep [選項] ‘正則表達式’文件

  • 格式2:前置命令 | egrep [選項] ‘正則表達式’

?? 2.3 常用命令選項

  • -i : 忽略字母大小寫

  • -v: 條件取反

  • -c: 統計匹配的行數

  • -q: 靜默、無任何輸出,一般用于檢測

  • -n: 顯示出匹配結果所在的行號

  • --color: 標紅顯示匹配字串?

三. 使用正則表達式

3.1 正則表達式列表

3.2 實例

?1)輸出以“r”開頭的用戶記錄:

[root@client?~]#?grep?'^r'?/etc/passwd root:x:0:0:root:/root:/bin/bash rpc:x:32:32:Rpcbind?Daemon:/var/lib/rpcbind:/sbin/nologin rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin radvd:x:75:75:radvd?user:/:/sbin/nologin rpcuser:x:29:29:RPC?Service?User:/var/lib/nfs:/sbin/nologin

2)輸出以“nologin”結尾的行:

[root@client?~]#?grep?'nologin$'?/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin ...?...

3)grep檢索式同時組合多個條件,可使用轉義字符或者使用擴展正則

? 輸出以"adm"和“mail”開頭的行(使用轉義字符“\|”):

[root@client?~]#?grep?"^adm\|^mail"?/etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

?輸出以"adm"和“mail”開頭的行(使用拓展正則):

[root@client?~]#?grep?-E?"^adm|^mail"?/etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

4)grep、egrep中-q選項

?選項 -q 表示 quiet(靜默)的意思,結合此選項可以只做檢索而并不輸出,通常在腳本內用來識別查找的目標是否存在,通過返回狀態 $? 來判? 斷,這樣可以忽略無關的文本信息,簡化腳本輸出。

?檢查/etc/hosts文件內是否存在127.0.0.1的映射記錄,如果存在則顯示“YES”,否則輸出 “NO”:

[root@client?~]#?grep?'^127.0.0.1'?/etc/hosts?&&?echo?"YES"?||?echo?"NO" 127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4 YES [root@client?~]#?grep?-q?'^127.0.0.1'?/etc/hosts?&&?echo?"YES"?||?echo?"NO" YES

5)基本元字符.---匹配任意單個字符

?以/etc/rc.local文件為例,確認文本內容:

[root@client?~]#?cat?/etc/rc.local? #!/bin/bash #?THIS?FILE?IS?ADDED?FOR?COMPATIBILITY?PURPOSES # #?It?is?highly?advisable?to?create?own?systemd?services?or?udev?rules #?to?run?scripts?during?boot?instead?of?using?this?file. # #?In?contrast?to?previous?versions?due?to?parallel?execution?during?boot #?this?script?will?NOT?be?run?after?all?other?services. # #?Please?note?that?you?must?run?'chmod?+x?/etc/rc.d/rc.local'?to?ensure #?that?this?script?will?be?executed?during?boot. touch?/var/lock/subsys/local

輸出/etc/rc.local文件內至少包括一個字符(\n換行符除外)的行,即非空行:

[root@client?~]#?egrep?'.'?/etc/rc.local #!/bin/bash #?THIS?FILE?IS?ADDED?FOR?COMPATIBILITY?PURPOSES # #?It?is?highly?advisable?to?create?own?systemd?services?or?udev?rules #?to?run?scripts?during?boot?instead?of?using?this?file. # #?In?contrast?to?previous?versions?due?to?parallel?execution?during?boot #?this?script?will?NOT?be?run?after?all?other?services. # #?Please?note?that?you?must?run?'chmod?+x?/etc/rc.d/rc.local'?to?ensure #?that?this?script?will?be?executed?during?boot. touch?/var/lock/subsys/local

輸出/etc/rc.local文件內的空行(用 –v 選項將條件取反):

[root@client?~]#?egrep?-v?'.'?/etc/rc.local[root@client?~]#

上述取空行的操作與下列操作效果相同:

[root@client?~]#?egrep?'^$'?/etc/rc.local[root@client?~]#

6)基本元字符+、?、*? (表示目標的出現次數)

就以/etc/rc.local文件為例:

輸出包括 f、ff、ff、……的行,即“f”至少出現一次:

[root@client?~]#?egrep?'f+'?/etc/rc.local

輸出末尾的“d”最多出現一次:

[root@client?~]#?egrep?'d?'?/etc/rc.local

輸出包括stu、stuf、stuff、stufff、……的行,即末尾的“f”可出現任意多次,也可以沒有。

[root@client?~]#?egrep?'stuf*'?/etc/rc.local

輸出所有行,單獨的“.*”可匹配任意行(包括空行):

[root@client?~]#?egrep?'.*'?/etc/rc.local

7) 元字符{}---限定出現的次數范圍

創建一個練習用的測試文件:

[root@client?~]#?cat?test.txt? ab?def?ghi?abdr dedef?abab?ghighi abcab?njimkol dfsahghasdfdsa cdcd?ababab Hello?abababab?World

輸出包括ababab的行,即“ab”連續出現3次:

[root@client?~]#?egrep?'(ab){3}'?test.txt cdcd?ababab Hello?abababab?World

輸出包括abab、ababab、abababab的行,即“ab”連續出現2~4次:

[root@client?~]#?egrep?'(ab){2,4}'?test.txt dedef?abab?ghighi cdcd?ababab Hello?abababab?World

輸出包括ababab、abababab、……的行,即“ab”最少連續出現3次:

[root@client?~]#?egrep?'(ab){3,}'?test.txt cdcd?ababab Hello?abababab?World

8) 元字符[]---匹配范圍內的單個字符

還以test.txt為例,母的行,使用[A-Z]匹配連續范圍:

[root@client?~]#?egrep?'[A-Z]'?test.txt Hello?abababab?World

輸出包括abc、abd的行,即前兩個字符為“ab”,第三個字符只要是c、d中的一個就符合條件:

[root@client?~]#?egrep?'ab[cd]'?test.txt ab?def?ghi?abdr abcab?njimkol

9)匹配mac地址

正則表達式匹配的MAC地址可以寫成:

[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}

又或者可以這么寫:

[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}

10)匹配郵箱地址

電子郵箱地址的特征是“用戶名@域名”,主要包括: ? ?

  • 用戶名與域名之間以 @ 分隔

  • 用戶名不少于3個字符,可能由字母、下劃線、句點 . 、數字組成

  • 域名應至少有一個 . 分隔,分隔的各部分至少2個字符,可能由字母、減號、數字組成

正則表達式可以表示為:

[0-9a-zA-Z_.]{3,}@[0-9a-zA-Z.-]{2,}(\.[0-9a-zA-Z-]{2,})+


轉載于:https://blog.51cto.com/11483827/2363787

總結

以上是生活随笔為你收集整理的正则表达式基础知识及应用(用于个人学习以及回顾)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。