matlab正则表达式

正则表达式就是一个表达式(也是一串字符),它定义了某种字符串模式——利用正则表达式,可以对大段的文字进行复杂的查找、替换等。

Matlab 提供的正则表达式函数有三个:

  • regexp——用于对字符串进行查找,大小写敏感;
  • regexpi——用于对字符串进行查找,大小写不敏感;
  • regexprep——用于对字符串进行查找并替换。
用法(以 regexpi 为例):
[start end extents match tokens names] = regexpi('str', 'expr') 
start 为匹配字符串的起始位置;end 为匹配字符串的终止位置;extents 为扩展内容,和'tokens'指示符一起用,指示出现 tokens 的位置;match 即找到的匹配字串;tokens 匹配正则表达式中标记(tokens)的字串;names 为匹配到的命名标记的标记名。
若不需要所有的输出,可以用下面的方式有选择的输出:
[v1 v2 ...] = regexpi('str', 'expr', 'q1', 'q2', ...)
'q1'、'q2' ...... 为 'start'、'end'、'tokens'、'tokensExtents'、'match'、'names' 之一,意义与前文相同。v1、v2...... 的输出顺序与 q1、q2...... 一致。 

**********************
A:句点符号
**********************
. —— 匹配任意一个(只有一个)字符(包括空格)。

假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以 't' 字母开头,以 'n' 字母结束;另外,有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符 —— 句点符号 '.' 。这样,完整的表达式就是 t.n,它匹配 tan、ten、tin 和 ton,还匹配 t#n、tpn 甚至 t n,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格,即:正则表达式 t.n 匹配 ten、tin、ton、t n、tpn、t#n、t@n 等。
matlab实例:
clear;clc

str='ten,&8yn2tin6ui>&ton, t n,-356tpn,t#n,4@).,t@nT&nY';

pat='t.n';

o1=regexpi(str,pat,'start')             %用'start'指定输出 o1 为匹配正则表达式的子串的起始位置

o2=regexpi(str,pat,'end')               %用'end'指定输出 o2 为匹配正则表达式的子串的结束位置

o3=regexpi(str,pat,'match')             %用'match'指定输出 o3 为匹配正则表达式的子串

[o11,o22,o33]=regexpi(str,pat,'start','end','match')            %同时输出起始位置和字串
输出:
o1 =
1 10 18 23 31 35 44 47

o2 =
3 12 20 25 33 37 46 49

o3 =
'ten' 'tin' 'ton' 't n' 'tpn' 't#n' 't@n' 'T&n'

o11 =
1 10 18 23 31 35 44 47

o22 =
3 12 20 25 33 37 46 49

o33 =
'ten' 'tin' 'ton' 't n' 'tpn' 't#n' 't@n' 'T&n'

**********************
B:方括号符号
**********************
[oum] —— 匹配方括号中的任意一个。

为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号([])里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式 t[aeio]n 只匹配 tan、Ten、tin 和 toN等。但 Tmn、taen 不匹配,因为在方括号之内你只能匹配单个字符。
matlab实例:
clear;clc

str='ten,&8yn2tin6ui>&ton, t n,-356tpn,t#n,4@).,t@nT&nY';

pat='t[aeiou]n';                      

[o11,o22,o33]=regexpi(str,pat,'start','end','match')   
输出:
o11 =
1 10 18

o22 =
3 12 20

o33 =
'ten' 'tin' 'ton'
**********************
C:方括号中的连接符
**********************
'[c1-c2]' —— 匹配从字符 c1 开始到字符 c2 结束的字母序列(按字母表中的顺序)中的任意一个。例如 [a-c] 匹配 a、b、c、A、B、C,即正则表达式 t[a-z]n 匹配 tan、tbn、tcn、tdn、ten、……、txn、tyn、tzn。
matlab实例:
clear;clc

str='ten,&8yn2tin6ui>&ton, t n,-356tpn,t#n,4@).,t@nT&nY';

pat='t[a-z]n';                        

[o11,o22,o33]=regexpi(str,pat,'start','end','match')   
输出:
o11 =
1 10 18 31

o22 =
3 12 20 33

o33 =
'ten' 'tin' 'ton' 'tpn'
**********************
D:特殊字符
**********************
\.等 —— 即由 '\' 引导的,代表有特殊意义或不能直接输入的单个字符。

在使用 fprintf 函数输出时我们常用 '\n' 来代替回车符,这里也是同样的道理,用 \n 在正则表达式中表示回车符。类似的还有 \t 横向制表符,'\*' 表示 '*' 等。后一种情况用在查询在正则表达式中有语法作用的字符,详见下文。

下面是一些匹配单个字符的转义字符正则表达式及所匹配的值。

\xN 或\x{N} 匹配八进制数值为 N 的字符

\oN 或\o{N} 匹配十六进制数值为 N 的字符

\a Alarm(beep)

\b Backspace

\t 水平 Tab

\n New line

\v 垂直 Tab

\f 换页符

\r 回车符

\e Escape

\c 某些在正则表达式中有语法功能或特殊意义的字符 c,要用 \c 来匹配,而不能直接用 c 匹配,例如 . 用正则表达式 \. 匹配,而 \ 用正则表达式 \\ 匹配。
matlab实例:
clear;clc

str='l.[a-c]i.$.a';

pat1='.';pat2='\.';

o=regexpi(str,pat1,'match')

o1=regexpi(str,pat2,'match')
输出:
o =

'l' '.' '[' 'a' '-' 'c' ']' 'i' '.' '$' '.' 'a'


o1 =

'.' '.' '.'
**********************
E:类表达式
**********************

\w、\s 和 \d 等 —— 匹配某一类字符中的一个。

和上面的 \n 等表中的转义字符有所不同,\w、\s、\d 等匹配的不是某个特定的字符,而是某一类字符。具体说明如下:

\w 匹配任意的单个文字字符,相当于 [a-zA-Z0-9_];

\s 匹配任意的单个空白字符,相当于 [\t\f\n\r];

\d 匹配任意单个数字,相当于 [0-9];

\S 匹配除空白符以外的任意单个字符,相当于 [^\t\f\n\r] —— 方括号中的^表示取反;

\W 匹配任意单个字符,相当于 [^a-zA-Z0-9_];

\D 匹配除数字字符外的任意单个字符,相当于 [^0-9]。
matlab实例:
s='This city has a population of more than 1,000,000.';

ptn='\d';

regexp(s,ptn,'match')
输出:
ans =

'1' '0' '0' '0' '0' '0' '0'

………………………………………………………………………………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值