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