正则表达式在处理字符串及文本时显得十分方便,在perl, python等脚本语言,以及java, .net等平台上都支援正则表达式。事实上,在MATLAB中也提供了正则表达式的支持。主要包含三个常用的函数:regexp(), regexpi(), regexprep()。其中regexp()用来匹配正则表达式,regexpi()完成类似的功能,但是忽略字符串的大小写,regexprep()则按照指定的pattern完成替换功能。


MATLAB正则表达式主要包含以下特殊匹配符号:

  • . 匹配任何单个字符(包括空白字符)

[abc] 匹配括号里包含的任何单个字符,a或b或c

[^abc] 匹配括号中字符以外的任何单个字符,任何除a和b和c外的字符

[a-x] 匹配a-x范围内的任何单个字符

\s 匹配任何空白字符,等效于[ \f\n\r\t\v]

\S 匹配任何非空白字符,等效于[^ \f\n\r\t\v]

\w 匹配任何字母,数字或下划线字符,对于英文字符集,等效于[a-zA-Z_0-9]

\W 匹配任何除了字母,数字或下划线以外的字符,对于英文字符集,等效于[^a-zA-Z_0-9]

\d 匹配任何数字,等效于[0-9]

\D 匹配任何数字以外的字符,等效于[^0-9]

  • 分组和捕获

(expr) 分组并捕获

(?:expr) 分组但不捕获

expr1|expr2 匹配expr1或者expr2

  • 非匹配操作符(常用于在正则表达式内添加注释)

(?# blabla) blabla是注释内容

  • 占位符

^ 字符串起始

$ 字符串结尾

\< 单词起始

\> 单词结尾

  • 环视

(?=expr) 从当前位置向前看(字符串向右的方向),测试是否匹配expr

(?!expr) 从当前位置向前看(字符串向右的方向),测试是否不匹配expr

(?<=expr) 从当前位置向后看(字符串向左的方向),测试是否匹配expr

(?<!expr) 从当前位置向后看(字符串向左的方向),测试是否不匹配expr

  • 定义数量

expr{m,n} 至少m次,最多n次

expr{m,} 至少m次,没有上限

expr{n} 正好n次

expr? 出现0次或1次

expr* 出现任意次(可以是0次)

expr+ 出现1次或更多次

  • 捕获

(expr) 捕获匹配得到的字符串

\N 匹配第N次捕获的字符串

$N 引用第N次捕获的字符串

(?(N)s1|s2) 如果存在第N次捕获的字符串,则匹配s1,否则匹配s2

  • 给捕获命名

(?<name>expr) 给捕获的字符串起名字叫name

\k<name> 匹配名叫name的被捕获的字符串

$<name> 引用名叫name的被捕获字符串

(?(name) s1 | s2) 我想您应该知道是什么意思