matlab中的正则表达式

本文详细介绍了正则表达式的各种用法,包括基本语法、特殊字符、匹配规则、动态规则等,并提供了输出结果的选择方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、关于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。


MATLAB 中,正则表达式是一种用于匹配字符串模式的强大工具。通过使用 `regexprep`、`regexp` 和其他函数,可以实现复杂的文本处理操作。 ### 正则表达式的功能: 1. **查找**:通过 `regexp` 函数可以在字符串中找到所有与指定正则表达式相匹配的部分。 ```matlab str = 'The price is $50 and the tax rate is 8%.'; matches = regexp(str, '\$\d+|\d+%'); ``` 上述代码会返回价格 (`$50`) 和税率 (`8%`) 的位置索引。 2. **替换**:利用 `regexprep` 可以将符合条件的内容替换成新内容。 ```matlab newStr = regexprep(str, '\b(\w)(\w*)(\b)', '${upper($1)}${lower($2)}'); ``` 这段代码会使每个单词的第一个字母大写,其余部分小写。 3. **拆分**:借助于正则表达式能够按照特定规则分割字符串数组。 ```matlab tokens = regexp('one,two;three|four', ',|;|\|', 'split'); ``` 4. **验证格式是否正确**:编写适当的正则表达式可以帮助确认邮箱地址等数据项的有效性。 例如检验电子邮件地址的基本结构: ```matlab emailPattern = '^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$'; emails = {'example@test.com'; 'bad-email@'}; isValidEmail = cellfun(@(x) ~isempty(regexp(x,emailPattern)), emails); ``` 这里构造了简单的邮件检查模式,并测试两个样本串的合法性。 ### 常见元字符及其作用 - `\d`: 匹配任意数字 (equivalent to [0-9]). - `\s`: 空白符(包括空格、制表符和换行符). - `\w`: 字母数字或下划线字符 ([A-Za-z0-9_]) . - `. * + ? [] {} () ^ $ | \ /` : 具有特殊含义需要转义才能作为普通符号使用的字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值