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