matlab中的正则表达式


一、关于regexp的用法
输出 = regexp(str,expression,...选择参数);

二、输入参数
str,expression,...选择参数
%字符串 和 表达式为输入
注: str和表达式都可以是cell数组,将按照次序匹配,但需要两者的维度匹配。执行过程将按照次序逐一匹配。

三、匹配规则
匹配字符及含义
.  : 任何字符
[] : 括号中的任一字符
[^]: 非括号中的任意字符
\w : 等同[a-z_A-Z0-9]
\W : 等同[^a-z_A-Z0-9]
\d : 一个数字,等价[0-9]
\D : 非数字字符,等价[^0-9]
\s : 空白符[ \t\r\n\f\v]
\S : 非空白符[^ \t\r\n\f\v]

分组及位置规则
() : 匹配分组子表达式
|  : 或者关系,匹配多个表达式
^  : 匹配字符串的开头
$  : 匹配字符串的结尾
\< : 匹配word的开头
<\ : 匹配word的结尾

匹配重数次数
*  : 0或多次
+  : 1或多次
? : 0或一次
{n,m}: 在n到m次中间
{n,}: 表示至少匹配n次
{m} : 固定匹配m次
*? : 连用,最短匹配,而*默认最长匹配;
*+  : 贪婪匹配,何用?

转义字符\
用于特殊字符的匹配.表示匹配任意字符,而\.表示匹配点本身;
\oN 与 \o{N}匹配值为N的八进制数;
\xN 与 \x{N}匹配值为N的十六进制数;

关于标识 tokens
正则表达式的标记,是指用小括号()包围的部分表达式,将被作为一组,分配一个标号,或显式定义一个标号;
数字标记:
只要是(expr)形式,自动按次序分配标识;
\N 时则引用第N各数字标记,不存在N时无法匹配;
(?(N)expr1|expr2):如果N匹配成功,则匹配expr1,否则匹配expr2;
命名标记:
(?<name>(expr)),标记则为name;
引用方式:\k<name〉
逻辑判断:(?(name)expr1|expr2)
不加标记只分组的方式:
(?:expr)和(?>expr)

条件判断
字符判断方式
(?=g) : 相应匹配表达式后一位置需要是g字符才匹配
(?!g) : 相应匹配表达式后一位置需要不是g字符才匹配
(?<=g) : 相应匹配表达式前一位置需要是g字符才匹配
(?<!g) : 相应匹配表达式前一位置需要不是g字符才匹配

逻辑和条件判断
或 | : (expr1 | expr2)
形式1:(?(cond)expr)  cond = true 匹配expr
形式2:(?(cond)expr1|expr2))如果cond为真则执行expr1,否则执行expr2;

动态规则匹配
动态正则表达式中引用标记:$N 和$<name> 为标识匹配出的字符串的值;
三种形式:
(??expr):先解析expr,然后进行匹配;
(??@function):先执行函数,将函数结果进行解析,最后用解析的结果进行匹配,函数入参可为标记引用;
(?@function):只是执行函数,函数的返回不会作为匹配规则的参数;

其它取值方法:
$&、$0、$`、$'
$&/$0表示匹配到的当前的字符串;
$`表示匹配到的当前的字符串之前的字符串;
$'表示匹配到的当前的字符串之后的字符串;

四、输出结果
对于每组字符串匹配,支持多个输出,输出哪些可以进行选择,输出的顺序和选择的次序一致。

选择输出的关键字及含义
%          'start'   匹配成功的第一个字符位置,多次匹配成功,会有多个返回值
%            'end'   匹配成功的最后一个字符位置,多次匹配成功,会有多个返回值
%   'tokenExtents'   标识的开始和结束的位置索引
%          'match'   匹配成功的字符串返回
%         'tokens'   输出字符串中和与表达式中标识相匹配的字符串
%          'names'   正则表达式中命名标识的名字和匹配成功的字符串输出
%          'split'   被匹配字符串分开的字符串输出

五、regexpi与regexprep
regexp与regexpi最主要的差别:regexp大小写敏感,而regexpi大小写不敏感。
regexprep用来字符串替换,使用形式:
newstr = regexprep(oldstr,expression,repStr,...选项);
当使用newstr = regexprep(oldstr,'^',repStr,'emptymatch');时可实现在字符串前插入repStr。


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值