更新時(shí)間:2022-07-01 09:50:30 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1660次
正則表達(dá)式 (regex) 是一種可用于搜索和替換的文本模式。正則表達(dá)式類似于通配符中使用的 Unix 通配符,但功能更強(qiáng)大,可用于搜索、替換和驗(yàn)證文本。
Java正則表達(dá)式用于許多 Unix 命令(例如findand grep)以及大多數(shù)編程語(yǔ)言(例如 R 和 Python)中。
我們僅在此處顯示基本用法以幫助您入門。要進(jìn)行練習(xí),請(qǐng)先花一些時(shí)間在https://regex101.com上更好地了解如何使用正則表達(dá)式,然后了解如何在文本編輯器中使用它們進(jìn)行搜索和替換。
我們將練習(xí)使用grep. 如果匹配成功,則返回該行文本;否則什么都沒(méi)有。
In [1]:
grep --help | head -n 20
用法:grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e 模式] [-f 文件] [--binary-files=值] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [模式] [文件 ...]
文字字符匹配
In [2]:
echo abcd | grep abcd
A B C D
In [3]:
echo abcd | grep bc
A B C D
不匹配
In [4]:
echo abcd | grep ac
不區(qū)分大小寫的匹配
In [5]:
echo abcd | grep -i A
A B C D
In [6]:
echo abcd | grep A
匹配任何單個(gè)字符
恰好匹配一個(gè)字符。
In [7]:
echo abcd | grep a.c
A B C D
In [8]:
echo abcd | grep a..c
In [9]:
echo abcd | grep a..d
A B C D
匹配字符集
In [10]:
echo a2b | grep [0123456789]
a2b
In [11]:
echo a2b | grep [0-9]
a2b
In [12]:
echo a2b | grep [abc]
a2b
In [13]:
echo a2b | grep [def]
In [14]:
echo a2b | grep [a-z]
a2b
In [15]:
echo a2b | grep [A-Z]
字符集中的^表示匹配集合中不存在的任何內(nèi)容。
In [16]:
echo a2b | grep [A-Z]
In [17]:
echo a2b | grep [^A-Z]
a2b
許多有用的字符集(例如所有數(shù)字)已被預(yù)定義為 可以在正則表達(dá)式中使用的字符類。字符類在 Unix shell 中有點(diǎn)笨拙,但在編程語(yǔ)言中經(jīng)常使用更簡(jiǎn)單的形式(例如,' :raw-latex:`\d` '而不是 '[:digit:]')。
In [18]:
echo a2b | grep ['[:alpha:]']
a2b
In [19]:
echo a2b | grep ['[:digit:]']
a2b
In [20]:
echo a2b | grep ['[:punct:]']
In [21]:
echo a2,b | grep ['[:punct:]']
a2,b
我們?cè)谶@里使用 -E 參數(shù)來(lái)避免必須轉(zhuǎn)義特殊字符
-E, --extended-regexp
Interpret pattern as an extended regular expression (i.e. force
grep to behave as egrep).'
In [22]:
echo cat | grep -E '(cat|dog)'
貓
沒(méi)有-E
我們需要轉(zhuǎn)義特殊字符(和。|)
In [23]:
echo cat | grep '\(cat\|dog\)'
貓
我們也愛(ài)狗
In [24]:
echo dog | grep -E '(cat|dog)'
狗
但不是狐貍
In [25]:
echo fox | grep -E '(cat|dog)'
小心 - 使用方括號(hào)意味著不同的東西
In [26]:
echo fox | grep -E '[cat|dog]'
狐貍
錨點(diǎn)
^表示行首和$行尾。
In [27]:
echo abcd | grep ^ab
A B C D
In [28]:
echo abcd | grep ab$
In [29]:
echo abcd | grep ^cd
In [30]:
echo abcd | grep cd$
A B C D
重復(fù)字符
+匹配一個(gè)或多個(gè)前面的字符集
'*' 匹配零個(gè)或多個(gè)前面的字符集
'{m, n}' 匹配前面字符集的 m 和 n 次重復(fù)。
In [31]:
echo abbbcd | grep abcd
In [32]:
echo abbbcd | grep -E ab+cd
abbbcd
In [33]:
echo abbbcd | grep -E ab*cd
abbbcd
In [34]:
echo abbbcd | grep -E 'ab{1,5}cd'
abbbcd
In [35]:
echo abbbcd | grep -E a[bc]+d
abbbcd
\<并\>指出單詞邊界。也就是說(shuō),\只會(huì)匹配or但不匹配or 。foo barbar foofoobarbarfoo
In [36]:
echo 'other ones go together' | grep 'the'
其他的一起去
In [37]:
echo 'other ones go together' | grep '\<the\>'
In [38]:
echo 'other ones go together' | grep '\<other\>'
其他的一起去
In [39]:
echo "123_456_123_456" | grep -E '([0-9]+).*\1'
123_456_123_456
In [40]:
echo "123_456_123_456" | grep -E '([0-9]+)_([0-9]+)_\1_\2'
123_456_123_456
In [41]:
echo "123_456_123_123" | grep -E '([0-9]+)_([0-9]+)_\1_\2'
以上就是關(guān)于“Unix Shell正則表達(dá)式”的介紹,如果大家想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容細(xì)致全面,很適合沒(méi)有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)