目录
regexpi函数的功能是匹配正则表达式(不区分大小写)。
语法
startIndex = regexpi(str,expression)
[startIndex,endIndex] = regexpi(str,expression)
out = regexpi(str,expression,outkey)
[out1,...,outN] = regexpi(str,expression,outkey1,...,outkeyN)
___ = regexpi(___,option1,...,optionM)
___ = regexpi(___,'forceCellOutput')
说明
startIndex = regexpi(str,expression) 返回 str 的每个子字符串(与该正则表达式指定的字符模式匹配)的起始索引,而不考虑字母大小写。如果没有匹配项,则 startIndex 为空数组。
[startIndex,endIndex] = regexpi(str,expression) 返回所有匹配项的开始和结束索引。
out = regexpi(str,expression,outkey) 返回 outkey 指定的输出。例如,如果 outkey 为 'match',则 regexpi 返回与该表达式匹配的子字符串而非其开始索引。
[out1,...,outN] = regexpi(str,expression,outkey1,...,outkeyN) 按指定的顺序返回多个输出关键字指定的输出。例如,如果您指定 'match'、'tokens',则 regexpi 返回与整个表达式匹配的子字符串以及与部分表达式匹配的词元。
___ = regexpi(___,option1,...,optionM) 使用指定的选项标志修改搜索。例如,指定 'matchcase' 以执行区分大小写的匹配。您可以包括任何输入并请求之前语法中的任何输出。
___ = regexpi(___,'forceCellOutput') 以标量元胞的形式返回每个输出参数。元胞包含被描述为上述语法输出的数值数组或子字符串。可以包括任何输入并请求之前语法中的任何输出。
示例
模式匹配
查找以 c 开头并以 t 结尾且其中包含一个或多个元音的单词。
str = 'bat cat can car COAT court cut ct CAT-scan';
expression = 'c[aeiou]+t';
startIndex = regexpi(str,expression)
startIndex = 1×4
5 17 28 35
startIndex 中的值指示与正则表达式匹配的每个单词的第一个字符的索引。
正则表达式 'c[aeiou]+t' 指定以下模式:
c 必须为第一个字符。
c 必须后跟方括号内的一个字符 [aeiou]。
括起的模式必须出现一次或多次,如 + 运算符所指示。
t 必须为最后一个字符,括起的模式和 t 之间没有任何字符。
区分大小写的匹配
在整个或部分表达式中匹配字母大小写。默认情况下,regexpi 执行不区分大小写的匹配。
str = 'A character vector with UPPERCASE and lowercase text.';
expression = '\w*case';
matchStr = regexpi(str,expression,'match')
matchStr = 1x2 cell
{'UPPERCASE'} {'lowercase'}
使用与 regexpi 具有相同语法的 regexp 函数执行区分大小写的匹配。
matchWithRegexp = regexp(str,expression,'match')
matchWithRegexp = 1x1 cell array
{'lowercase'}
使用 'ignorecase' 选项可对 regexp 禁用区分大小写的匹配。
matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 1x2 cell
{'UPPERCASE'} {'lowercase'}
对于多个表达式,使用 (?i) 和 (?-i) 搜索标志对选定表达式启用和禁用不区分大小写的匹配。
expression = {'(?-i)\w*case';...
'(?i)\w*case'};
matchStr = regexp(str,expression,'match');
celldisp(matchStr)
matchStr{1}{1} =
lowercase
matchStr{2}{1} =
UPPERCASE
matchStr{2}{2} =
lowercase
参数说明
str — 输入文本
输入文本,指定为字符向量、字符向量元胞数组或字符串数组。元胞数组中的每个字符向量或字符串数组中的每个字符串可以为任意长度并包含任意字符。
如果 str 和 expression 均为字符串数组或元胞数组,则它们的维度必须相同。
expression — 正则表达式
正则表达式,指定为字符向量、字符向量元胞数组或字符串数组。每个表达式可包含字符、元字符、运算符、词元和用于指定在 str 中匹配的模式的标志。
下表描述了正则表达式的各元素。
option — 搜索选项
搜索选项,指定为字符向量。选项成对出现:一个选项对应于默认行为,另一个选项允许覆盖默认值。仅指定一对中的一个选项。选项可以按任意顺序显示。
startIndex — 每个匹配项的开始索引
每个匹配项的开始索引,以行向量或元胞数组的形式返回,如下所示:
如果 str 和 expression 均为字符向量或字符串标量,则输出为行向量(或者,如果没有任何匹配项,则为空数组)。
如果 str 或 expression 有一个是字符向量元胞数组或字符串数组,另一个是字符向量或字符串标量,则输出是行向量元胞数组。输出元胞数组与输入数组具有相同的维度。
如果 str 和 expression 均为元胞数组或字符串数组,则它们的维度必须相同。输出是具有相同维度的元胞数组。
endIndex — 每个匹配项的结束索引
每个匹配项的结束索引,以行向量或元胞数组的形式返回,如下所示:
如果 str 和 expression 均为字符向量或字符串标量,则输出为行向量(或者,如果没有任何匹配项,则为空数组)。
如果 str 或 expression 有一个是字符向量元胞数组或字符串数组,另一个是字符向量或字符串标量,则输出是行向量元胞数组。输出元胞数组与输入数组具有相同的维度。
如果 str 和 expression 均为元胞数组或字符串数组,则它们的维度必须相同。输出是具有相同维度的元胞数组。
out — 有关匹配项的信息
有关匹配项的信息,以数值、元胞、字符串或结构体数组的形式返回。输出中的信息取决于为 outkey 指定的值。
词元
词元是对应于正则表达式部分的匹配文本部分。要创建词元,请将正则表达式部分括在圆括号中。例如,此表达式查找 dd-mmm-yyyy 形式的日期,包括日、月和年的词元。
str = 'Here is a date: 01-Apr-2020';
expression = '(\d+)-(\w+)-(\d+)';
mydate = regexp(str,expression,'tokens');
mydate{:}
ans =
1×3 cell array
{'01'} {'Apr'} {'2020'}
可以将名称与词元关联起来以使其更便于识别:
str = 'Here is a date: 01-Apr-2020';
expression = '(?<day>\d+)-(?<month>\w+)-(?<year>\d+)';
mydate = regexp(str,expression,'names')
mydate =
struct with fields:
day: '01'
month: 'Apr'
year: '2020'