MATLAB 正則表達式

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章