Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Vim 正則表達式實戰:搜尋、替換、元字元、數量詞、位置錨點、分組回參與函數式替換全解析

編輯:系統常見問題解答

一、常用指令

  • /正則:前向搜尋。
  • :s/正則/替換/選項:當前行替換。常用選項 g(全行)、c(確認)。
  • :%s/正則/替換/g:全檔案替換。

二、元字元速查

元字元說明
.任意單一字元
[abc]字元集合(支援範圍 [a-z0-9])
[^abc]排除字元集合
\d數字 [0-9]
\D非數字
\x十六進位字元 [0-9A-Fa-f]
\X非十六進位字元
\w單字字元 [0-9A-Za-z_]
\W非單字字元
\tTab 字元
\s空白字元 [ \t]
\S非空白字元

需匹配字面符號(* . / \ [)時,前加 \ 轉義(如 \*、\.、\\)。

三、數量詞

元字元說明
*0 次或多次
\+1 次或多次
\?0 次或 1 次
\{n,m}n 到 m 次
\{n}恰好 n 次
\{n,}至少 n 次
\{,m}至多 m 次

四、位置錨點

符號說明
^行首
$行尾
\<單字開頭
\>單字結尾

五、實戰範例

/char\s\+[A-Za-z_]\w*;          " 查找 char 開頭的變數宣告
/\d\d:\d\d:\d\d                " 查找 HH:MM:SS 時間格式
:g/^\s*$/d                     " 刪除純空白行
:s/\<four\>/4/g              " 單字 four 替換為 4(fourteen 不受影響)

六、分組捕獲與回參(\1, \2...)

用 \( \) 括起子模式,替換端用 \1 \2 回參。

/\(a\+\)[^a]\+\1               " 找出首尾 a 數量相同的字串(如 aabbbaa)
:s/\(http:\/\/[-a-z\._~%\/]\+\)/\<a href="\1"\>\1\<\/a\>/g  " URL 自動轉超連結
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1/g  " 交換兩欄位順序

七、函數式替換(\= 表達式)

格式::s/正則/\=函數式。函數式中可用 submatch(n) 取得第 n 組捕獲,submatch(0) 為整個匹配。

:%s/\<id\>/\=line(".")/g                    " 將每行 id 替換為行號
:%s/^\<\w\+\>/\=(line(".")-10).". ".submatch(1)/g  " 第 11 行 word → 1. word

八、與 Perl 正則差異速查

VimPerl含義
\++1 次或多次
\??0 或 1 次
\{n,m}{n,m}n 到 m 次
\( \)( )分組捕獲

九、UBB 標籤轉換練習

:%s/.*src="\([^"]*\)"[^>]*>/[img]\1[/img]/g

將 HTML <img src="gu.jpg"> 轉為 [img]gu.jpg[/img]。
解析:\([^"]*\) 捕獲非引號字串作為 \1,替換端引用。

熟練 Vim 正則,讓文字編輯如神助。

Copyright © Windows教程網 All Rights Reserved