元字符是在正则表达式中具有特殊含义的字符,其含义超出了自己本身的含义。比如用\d表示数字,用\s表示空白。[大谦MATLAB,dqmatlab点com]
MATLAB中常见的元字符如表3-1中所示。
表3-1 常见元字符
| 元字符 | 说 明 | 元字符 | 说 明 |
|---|---|---|---|
| . | 匹配除换行符以外的任意字符 | \n | 匹配换行符 |
| \w | 匹配字母、数字、下划线或汉字 | \a | 匹配警报(蜂鸣) |
| \s | 匹配任意空白符 | \b | 匹配退格符 |
| \d | 匹配数字 | \f | 匹配换页符 |
| ^ | 匹配字符串的开始 | \r | 匹配回车符 |
| $ | 匹配字符串的结束 | \t | 匹配水平制表符 |
| \< | 匹配单词开头 | \v | 匹配垂直制表符 |
| \> | 匹配单词结尾 | \char | 从字面上匹配具有特殊含义的任意字符 |
一般情况下是指定要查找的字符或在指定的范围内进行查找,但有时情况会反过来,即排除指定的字符或在指定的字符范围之外进行查找。这种情况下使用表示反义的元字符,如用\D表示非数字的字符,用\S表示非空白的字符。常见的反义元字符如表3-2中所示。
表3-2 反义元字符
| 反义元字符 | 说 明 |
|---|---|
| \W | 匹配任意不是字母,数字,下划线,汉字的字符 |
| \S | 匹配任意不是空白符的字符 |
| \D | 匹配任意非数字的字符 |
| \B | 匹配不是单词开头或结束的位置 |
| [^x] | 匹配除了x以外的任意字符 |
| [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
下面给定原始字符串,用regexp函数查找其中的全部数字,用regexprep函数将所有数字替换为空。单个的数字用元字符\d表示。
code.matlab
>> a='BC_101PW%'; %原始字符串
>> m0=regexp(a, '\d','match') %查找所有数字
m0=
1×3 string 数组
'1' '0' '1'
>> for i=1:l
str2num(m0(i))
end
ans =
1
ans =
0
ans =
1
>> ms=regexprep(a,7;\d','') %所有数字替换为空(删除)
ms=
'BC_PW%'
>> a='C5dC56 C5'
>> m=regexprep(a,'\<C\d','')
m =
'dC56 '
因为第1个C5位于原始字符串的开头,满足C加数字的条件,匹配;第2个C5前面为空格,满足\<的条件。将它们置换为空后剩下的字符串即为'dC56 '。
元字符^限制字符在原始字符串的最前面,如^\d表示原始字符串以数字打头。下面给定原始字符串,如果它以一个以上的数字打头,返回该数字。
code.matlab
>> a='12345my09';
>> m=regexp(a,'^\d+','match')
m =
1×1 cell 数组
{'12345'}
因为12345位于原始字符串打头位置,匹配;而09虽然也是数字,但不在打头位置,不匹配。正则表达式中的加号是表示重复的元字符,前面为d,表示一个以上的数字。
下面的代码中,\D表示不是数字的字符,元字符$限制字符在原始字符串的结尾处,如C$表示最后一个字符是C。
code.matlab
>> a='12345my09W';
>> m=regexp(a,'\d+\D','match')
m =
1×2 cell 数组
{'12345m'} {'09W'}
>> m=regexp(a,'\d+\D$','match')
m =
1×1 cell 数组
{'09W'}