舉個栗子:
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.
for
i
in
*.
tar
*.
tar
.gz
05.
do
06.new=new_$num.$
07.
mv
$i $new 2>
/dev/null
08.
09.
if
[ $? -
eq
0 ];
then
10.
echo
"remove $i to $new"
11.
let
num++
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...