MATLAB 正則表達式
與正則表達式相關的函數
matlab 中與正則表達式相關的函數:
函數名 | 功能 |
---|---|
regexp | 匹配正則表達式,大小寫敏感 |
regexpi | 匹配正則表達式,大小寫不敏感 |
regexprep | 基於正則表達式進行字符替換 |
regexp 用法
以 regexp 爲例說明用法
startIndex = regexp(str, exp)
[startIndex, endIndex] = regexp(str, exp)
[out1, out2, ...] = regexp(str, exp, outkey1, outkey2, ...)
out = regexp(str, exp, option, ...)
其中,str 爲待匹配的字符串,exp 爲正則表達式,outkey 用於指明輸出的類型。option 爲可選的選項。
輸出類型
outkey 取值:
如何構建 exp
元字符
. : 匹配任意一個字符
[c1c2c3] : 匹配來自方括號內的任意一個字符(+,-,.,*,?,|,$ 按照字面處理, - 表示範圍除外)
[^c1c2c3] : 匹配除方括號內字符以外的任意一個字符(+,-,.,*,?,|,$ 按照字面處理, - 表示範圍除外)
[c1-c2] : 匹配介於 c1-c2 之間的任意一個字符
\w : 匹配字母、數字、下劃線中的任意一個字符 <==> [a-z_A-Z0-9]
\W : 匹配除字母、數字、下劃線以外的任意一個字符 <==> [^a-z_A-Z0-9]
\s : 匹配任意一個空白符
\S : 匹配任意一個非空白字符符
\d : 匹配任意一個數字
\D : 匹配任意一個非數字字符
字符轉義
重複限定符
重複限定符的三種模式
重複限定符 *, +, ?, {m,n} 有三種模式:
- 貪婪模式(默認)
- 懶惰模式,在重複限定符後面加 ?
- 佔有模式,在重複限定符後面加 +
分組運算符
分組運算符 (), 有兩個作用:
- 用於捕獲 tokens
- 分組,改變運算優先級
(exp) : 分組,且捕獲 tokens
(exp) : 分組不捕獲
錨點
^exp : 以表達式開頭
exp$ : 以表達式結尾
選項(option)
例子
例如在 C 或 C++ 源文件中查找所有的函數調用,並提取函數名
主程序:
ch = txt2char('main.c'); % 子函數,讀取源文件到 char 類型變量
out = regexp(ch, '[a-z_A-Z]\w*\(.*?\);', 'match', 'dotexceptnewline'); % 匹配函數調用
func_names = regexp(ch, '([a-z_A-Z]\w*)\(.*?\);', 'tokens', 'dotexceptnewline'); % 直接提取函數名
子程序:
function chr = txt2char(file)
f = fopen(file, 'r');
if f == -1
disp('file not open!');
chr = -1;
return;
end
chr = '';
while ~feof(f)
chr = [chr, fgets(f)];
end
fclose(f);
end