元字符

元字符是在正则表达式中具有特殊含义的字符,其含义超出了自己本身的含义。比如用\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&#x27;,'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'}