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