regexpi
匹配正则表达式(不区分大小写)
语法
说明
返回 startIndex
= regexpi(str
,expression
)str
的每个子字符串(与该正则表达式指定的字符模式匹配)的起始索引,而不考虑字母大小写。如果没有匹配项,则 startIndex
为空数组。
[
返回所有匹配项的开始和结束索引。startIndex
,endIndex
] = regexpi(str
,expression
)
返回 out
= regexpi(str
,expression
,outkey
)outkey
指定的输出。例如,如果 outkey
为 'match'
,则 regexpi
返回与该表达式匹配的子字符串而非其开始索引。
___ = 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
均为字符串数组或元胞数组,则它们的维度必须相同。
数据类型: string
| char
| cell
expression
— 正则表达式
字符向量 | 字符向量元胞数组 | 字符串数组
正则表达式,指定为字符向量、字符向量元胞数组或字符串数组。每个表达式可包含字符、元字符、运算符、标文和用于指定在 str
中匹配的模式的标志。
下表描述了正则表达式的各元素。
元字符
元字符表示字母、字母范围、数字和空格字符。使用它们来构造广义的字符模式。
元字符 | 说明 | 示例 |
---|---|---|
| 任何单个字符,包括空白 |
|
| 包含在方括号中的任意字符。下列字符将按字面意义进行处理: |
|
| 未包含在方括号中的任意字符。下列字符将按字面意义进行处理: |
|
|
|
|
| 任意字母、数字或下划线字符。对于英语字符集, |
|
| 字母、数字或下划线之外的任意字符。对于英语字符集, |
|
| 任意空白字符;等同于 |
|
| 任意非空白字符;等同于 |
|
| 任意数字;等同于 |
|
| 任意非数字字符;等同于 |
|
| 八进制值 |
|
| 十六进制值 |
|
字符表示
运算符 | 说明 |
---|---|
| 警报(蜂鸣) |
| 退格符 |
| 换页符 |
| 换行符 |
| 回车符 |
| 水平制表符 |
| 垂直制表符 |
| 正则表达式中您要从字面上匹配(例如,使用 |
限定符
限定符指定某个模式必须出现在匹配文本中的次数。
限定符 | 表达式出现的次数 | 示例 |
---|---|---|
| 0 次或连续多次。 |
|
| 0 次或 1 次。 |
|
| 1 次或连续多次。 |
|
| 至少
|
|
| 至少连续
|
|
| 恰好连续 等效于 |
|
限定符可以以三种模式显示,如下表所述。q 表示上表中的任意限定符。
模式 | 说明 | 示例 |
---|---|---|
| 积极表达式:与尽可能多的字符匹配。 | 给定文本
|
| 消极表达式:与所需的尽可能少的字符匹配。 | 给定文本
|
| 主动表达式:最大程度地匹配,但不重新扫描文本的任何部分。 | 给定文本 |
分组运算符
分组运算符允许您捕获标文,将一个运算符应用于多个元素或在特定组中禁止追溯。
分组运算符 | 说明 | 示例 |
---|---|---|
| 将表达式元素分组并捕获标文。 |
|
| 分组但不捕获标文。 |
不进行分组时, |
| 以原子方式分组。不在组中追溯以完成匹配,并且不捕获标文。 |
|
| 匹配表达式 如果存在与 您可以在左括号后包括 |
|
定位点
表达式中的定位点与文本或单词的开头或结尾匹配。
定位点 | 与以下项匹配 | 示例 |
---|---|---|
| 输入文本的开头。 |
|
| 输入文本的结尾。 |
|
| 单词开头。 |
|
| 单词结尾。 |
|
环顾断言
环顾断言查找紧邻预期匹配项前后但并非该匹配项一部分的模式。
指针停留在当前位置,并且将放弃或不捕获对应于 test
表达式的字符。因此,前向断言可匹配重叠字符组。
环顾断言 | 说明 | 示例 |
---|---|---|
| 向前查找与 |
|
| 向前查找与 |
|
| 向后查找与 |
|
| 向后查找与 |
|
如果您在表达式之前指定前向断言,则运算等同于逻辑 AND
。
运算 | 说明 | 示例 |
---|---|---|
| 同时与 |
|
| 匹配 |
|
逻辑和条件运算符
逻辑和条件运算符允许您测试给定条件的状态,然后使用结果确定哪个模式(如果有)与下一条件匹配。这些运算符支持逻辑 OR
、if
或 if/else
条件。
条件可以是标文、环顾运算符或 (?@cmd)
形式的动态表达式。动态表达式必须返回逻辑值或数值。
条件运算符 | 说明 | 示例 |
---|---|---|
| 匹配表达式 如果存在与 |
|
| 如果条件 |
|
| 如果条件 |
|
标文运算符
标文是您通过将正则表达式的部分括在括号中而定义的匹配文本的部分。您可以按标文在文本中的顺序引用该标文(顺序标文),或将名称分配给标文以便于代码维护和使输出更易于阅读。
顺序标文运算符 | 说明 | 示例 |
---|---|---|
| 在标文中捕获与括起来的表达式匹配的字符。 |
|
| 匹配第 |
|
| 如果找到第 |
|
命名标文运算符 | 说明 | 示例 |
---|---|---|
| 在命名标文中捕获与括起来的表达式匹配的字符。 |
|
| 匹配 |
|
| 如果找到命名标文,则匹配 |
|
注意
如果表达式具有嵌套括号,则 MATLAB® 捕获对应于最外层括号的标文。例如,给定搜索模式 '(and(y|rew))'
,MATLAB 将为 'andrew'
但不为 'y'
或 'rew'
创建一个标文。
动态正则表达式
动态表达式允许您执行 MATLAB 命令或正则表达式以确定要匹配的文本。
将动态表达式括起来的括号不创建捕获组。
运算符 | 说明 | 示例 |
---|---|---|
| 解析 解析后, |
|
| 执行 |
|
| 执行 |
|
在动态表达式中,使用下列运算符定义替代文本。
替代运算符 | 说明 |
---|---|
| 当前作为匹配项的输入文本部分 |
| 位于当前匹配项之前的输入文本部分 |
| 紧随当前匹配项的输入文本部分(使用 |
| 第 |
| 命名标文 |
| 在 MATLAB 执行命令 |
注释
字符 | 说明 | 示例 |
---|---|---|
(?#comment) | 在正则表达式中插入注释。匹配输入时将忽略注释文本。 |
|
搜索标志
搜索标志修改匹配表达式的行为。在表达式中使用搜索标志的替代方法是传递 option
输入参数。
标志 | 说明 |
---|---|
(?-i) | 匹配字母大小写( |
(?i) | 不匹配字母大小写( |
(?s) | 将模式中的点 ( |
(?-s) | 将模式中的点与并非换行符的任意字符匹配。 |
(?-m) | 匹配文本开头和结尾的 |
(?m) | 匹配行开头和结尾的 |
(?-x) | 在匹配时包括空格字符和注释(默认值)。 |
(?x) | 在匹配时忽略空格字符和注释。使用 |
该标志修改的表达式可显示在括号后,例如
(?i)\w*
或显示在括号内并使用冒号 (:
) 与该标志分隔开,例如
(?i:\w*)
后面的语法允许您更改较大表达式的一部分的行为。
数据类型: char
| cell
| string
outkey
— 指示要返回的输出的关键字
'start'
(默认) | 'end'
| 'tokenExtents'
| 'match'
| 'tokens'
| 'names'
| 'split'
指示要返回的输出的关键字,指定为下列字符向量之一。
输出关键字 | 返回 |
---|---|
| 所有匹配项的开始索引, |
| 所有匹配项的结束索引, |
| 所有标文的开始和结束索引 |
| 与 |
|
|
| 每个命名标文的名称和文本 |
|
|
数据类型: char
| string
option
— 搜索选项
'once'
| 'warnings'
| 'matchcase'
| 'emptymatch'
| 'dotexceptnewline'
| 'lineanchors'
| ...
搜索选项,指定为字符向量。选项成对出现:一个选项对应于默认行为,另一个选项允许您覆盖默认值。仅指定一对中的一个选项。选项可以按任意顺序显示。
默认值 | 覆盖 | 说明 |
---|---|---|
|
| 尽可能多次地匹配表达式(默认值),或仅匹配一次。 |
|
| 取消警告(默认值),或显示警告。 |
|
| 忽略字母大小写(默认值),或匹配大小写。 |
|
| 忽略零长度匹配项(默认值),或包括这些匹配项。 |
|
| 将点与任意字符匹配(默认值),或与除换行符 ( |
|
| 将 |
|
| 在匹配时包括空格字符和注释(默认值),或忽略它们。借助 |
数据类型: char
输出参数
startIndex
— 每个匹配项的开始索引
行向量 | 行向量元胞数组
每个匹配项的开始索引,以行向量或元胞数组的形式返回,如下所示:
如果
str
和expression
均为字符向量或字符串标量,则输出为行向量(或者,如果没有任何匹配项,则为空数组)。如果
str
或expression
有一个是字符向量元胞数组或字符串数组,另一个是字符向量或字符串标量,则输出是行向量元胞数组。输出元胞数组与输入数组具有相同的维度。如果
str
和expression
均为元胞数组或字符串数组,则它们的维度必须相同。输出是具有相同维度的元胞数组。
endIndex
— 每个匹配项的结束索引
行向量 | 行向量元胞数组
每个匹配项的结束索引,以行向量或元胞数组的形式返回,如下所示:
如果
str
和expression
均为字符向量或字符串标量,则输出为行向量(或者,如果没有任何匹配项,则为空数组)。如果
str
或expression
有一个是字符向量元胞数组或字符串数组,另一个是字符向量或字符串标量,则输出是行向量元胞数组。输出元胞数组与输入数组具有相同的维度。如果
str
和expression
均为元胞数组或字符串数组,则它们的维度必须相同。输出是具有相同维度的元胞数组。
out
— 有关匹配项的信息
数值数组 | 元胞数组 | 字符串数组 | 结构体数组
有关匹配项的信息,以数值、元胞、字符串或结构体数组的形式返回。输出中的信息取决于您为 outkey
指定的值,如下所示。
输出关键字 | 输出说明 | 输出类型和维度 |
---|---|---|
| 匹配项的开始索引 | 对于
|
| 匹配项的结束索引 | |
| 所有标文的开始和结束索引 | 默认情况下,当返回所有匹配项时:
当指定 如果在特定索引 |
| 与 | 默认情况下,当返回所有匹配项时:
如果您指定 |
|
| 默认情况下,当返回所有匹配项时:
如果您指定 如果在特定索引处需要有标文,但未找到,MATLAB 将为标文返回空值:对于字符向量,返回 |
| 每个命名标文的名称和文本 | 对于所有匹配项:
|
|
| 对于所有匹配项:
|
详细信息
标文
标文是对应于正则表达式部分的匹配文本部分。要创建标文,请将正则表达式部分括在圆括号中。
例如,此表达式查找 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'
有关详细信息,请参阅正则表达式中的标文。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅Run MATLAB Functions in Thread-Based Environment。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)