进行查找或替换时有时需要连续查找或替换多个某种类型的字符,这就是重复。重复次数可以是确定的,也可以是不确定的。比如用\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'}