shell 中 貪婪匹配 和 非貪婪匹配

2021-07-30 15:58:33 字數 2643 閱讀 4402

舉個栗子:

1

2

v=jfedu.shiyiwen.com

echo$

乙個%為非貪婪匹配,即匹配最短結果。%從右到左進行非貪婪匹配,匹配什麼呢? 匹配已 .*的字元。 那麼當然是匹配到了.com 然後執行刪除匹配到的字元。結果就是(這裡的 "." 相當於定界符。而「*」是萬用字元)

jfedu.shiyiwen

1

echo$

而這裡執行貪婪匹配,即匹配最長結果就匹配到了 .shiyiwen.com 結果為

jfedu

這裡在說乙個 # 剛好和 %順序相反而已,#是從左到右來進行匹配的。 老規矩:舉個栗子

1

2

3

4

5

6

7

v=jfedu.shiyiwen.com

echo$

shiyiwen.com

echo$

com

用處有很多,比較常見的就是很方便的獲取檔案字尾名和檔名。舉個栗子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

01.#!/bin/bash

02.

03.num=1

04.foriin*.tar*.tar.gz

05.do

06.new=new_$num.$

07.mv$i $new 2>/dev/null

08.

09.if[ $? -eq0 ];then

10.echo"remove $i to $new"

11.letnum++

12.fi

13.

14.done

在補充一些:

$:計算value字串的字元數量。

補充:「*」表示萬用字元,用於匹配字串將被刪除的字串。「.」表示字串中分隔符,可以為任意乙個或多個字元。「%」表示從右向左匹配,「#」表示從左向右匹配,「\」表示替換,都屬於非貪婪匹配,即匹配符合萬用字元的最短結果。與「%」、「#」和「/」類似的有「%%」、「##」和「//」,都屬於貪婪匹配,即匹配符合萬用字元的最長結果。

$$:從value字串的左邊開始中擷取子串。

$$:從value字串的右邊開始中擷取子串。

補充:左邊第乙個字元從「0」開始,右邊第乙個字元從「0-1」開始。 表示偏移offset個字元開始,length表示要擷取字元的長度。如果沒有length變數,表示偏移offset個字元開始到字串結束。

$:當變數未定義或者值為空時,返回值為word的內容,否則返回變數的值。

$:當變數未定義或者值為空時,返回word的值的同時並將word賦值給value,否則返回變數的值。

$:當變數已賦值時,其值才用word替換,否則不進行任何替換。

$:當變數已賦值時,正常替換。否則將訊息message送到標準錯誤輸出(若此替換出現在shell程式中,那麼該程式將終止執行)。

補充:word可以為乙個字串,也可以為乙個變數。當為變數時,需要用「$」引用該變數。

另外 ${}的用途,請檢視部落格的另外一篇博文。

貪婪匹配和非貪婪匹配

貪婪模式 在整個表示式匹配成功的前提下,盡可能多的匹配 非貪婪模式 在整個表示式匹配成功的前提下,盡可能少的匹配 重複匹配0次或1次 重複匹配0次或更多次 重複匹配1次或更多次 預設情況下是貪婪的!content abbbbc pattern re.compile r ab result patte...

貪婪和非貪婪

python裡數量詞預設是貪婪的 在少數語言裡也可能是預設非貪婪 總是嘗試匹配盡可能多的字元 非貪婪則相反,總是嘗試匹配盡可能少的字元。在 後面加上?使貪婪變成非貪婪。s this is a number 234 235 22 423 r re.match d d d d s r.group 1 4...

python re模組匹配貪婪和非貪婪模式詳解

python貪婪和非貪婪 正規表示式通常用於在文字程式設計客棧中查詢proouv匹配的字串。python裡數量詞預設是貪婪的 在少數語言裡也可能是預設非貪婪 總是嘗試匹配盡可能多的字元 非貪婪則相反,總是嘗試匹配盡可能少的字元。在 後面加上?使貪婪變成非貪婪。s this is a number 2...