重复

进行查找或替换时有时需要连续查找或替换多个某种类型的字符,这就是重复。重复次数可以是确定的,也可以是不确定的。比如用\d+表示1个以上的数字,重复次数不确定;\d{5}表示5个数字,重复次数是确定的。[大谦MATLAB,dqmatlab点com]

正则表达式中表示重复的元字符如表3-3中所示。

表3-3 表示重复的元字符

元字符 说 明 元字符 说 明
* 重复零次或更多次 {n} 重复n次
+ 重复一次或更多次 {n,} 重复n次或更多次
? 重复零次或一次 {n,m} 重复n到m次

元字符*表示前面定义的字符可以重复0次或任意次,相当于 {0,}。下面给定1个字符串,找出所有W打头,后面跟或不跟数字的子字符串。

code.matlab
>> a='W123YZW85CW0DFWU';
>> m=regexp(a,'W\d*','match')
m =
  1×4 cell 数组
    {'W123'}    {'W85'}    {'W0'}    {'W'}

注意列表中最后1个元素在W后面没有跟数字。

元字符+表示前面定义的字符可以重复1次或任意次,相当于 {1,}。下面给定1个字符串,找出所有W打头,后面跟1个或1个以上数字的子字符串。

code.matlab
>> a='W123YZW85CW0DFWU';
>> m=regexp(a,'W\d+','match')
m =
  1×3 cell 数组
    {'W123'}    {'W85'}    {'W0'}

元字符?表示前面定义的字符可以重复0次或1次,相当于{0,1}。下面给定1个字符串,找出所有前后都是数字,中间有或没有小数点的子字符串。

code.matlab
>> a='W10.23RWA908C5..1';
>> m=regexp(a,'\d+\.?\d+','match')
m =
  1×2 cell 数组
    {'10.23'}    {'908'}

所有合法的数字被查找出来。

使用{}可以设置重复次数。{n}表示前面定义的字符重复n次。下面给定1个字符串,找出其中连续3个都是数字的子字符串。

code.matlab
>> a='WT123Pq89C';
>> m=regexp(a,'\d{3}','match')
m =
  1×1 cell 数组
    {'123'}

{m,n}表示前面定义的字符的重复次数在1个指定的范围内取值,最小重复m次,最多重复n次。下面给定1个字符串,找出其中连续2个或3个都是数字的子字符串。

code.matlab
>> a='WT123Pq89C';
>> m=regexp(a,'\d{2,3}','match')
m =
  1×2 cell 数组
    {'123'}    {'89'}

{m,}表示前面定义的字符最少重复m次,相当于元字符+。下面给定1个字符串,找出其中连续2个以上都是数字的子字符串。

code.matlab
>> m=regexp(a,'\d{2,}','match')
m =
  1×2 cell 数组
    {'123'}    {'89'}