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 = 1×2 cell
{'UPPERCASE'} {'lowercase'}
使用与 regexpi 具有相同语法的 regexp 函数执行区分大小写的匹配。
matchWithRegexp = regexp(str,expression,'match')matchWithRegexp = 1×1 cell array
{'lowercase'}
使用 'ignorecase' 选项可对 regexp 禁用区分大小写的匹配。
matchWithIgnorecase = regexp(str,expression,'match','ignorecase')
matchWithIgnorecase = 1×2 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 和 expression 均为字符串数组或元胞数组,则它们的维度必须相同。
数据类型: string | char | cell
正则表达式,指定为字符向量、字符向量元胞数组或字符串数组。每个表达式可包含字符、元字符、运算符、词元和用于指定在 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
指示要返回的输出的关键字,指定为下列字符向量之一。
输出关键字 | 返回 |
|---|---|
| 所有匹配项的开始索引, |
| 所有匹配项的结束索引, |
| 所有词元的开始和结束索引 |
| 与 |
|
|
| 每个命名词元的名称和文本 |
|
|
数据类型: char | string
搜索选项,指定为字符向量。选项成对出现:一个选项对应于默认行为,另一个选项允许您覆盖默认值。仅指定一对中的一个选项。选项可以按任意顺序显示。
| 默认值 | 覆盖 | 描述 |
|---|---|---|
|
|
| 尽可能多次地匹配表达式(默认值),或仅匹配一次。 |
|
|
| 取消警告(默认值),或显示警告。 |
|
|
| 忽略字母大小写(默认值),或匹配大小写。 |
|
|
| 忽略零长度匹配项(默认值),或包括这些匹配项。 |
|
|
| 将点与任意字符匹配(默认值),或与除换行符 ( |
|
|
| 将 |
|
|
| 在匹配时包括空格字符和注释(默认值),或忽略它们。借助 |
数据类型: char
输出参量
每个匹配项的开始索引,以行向量或元胞数组的形式返回,如下所示:
如果
str和expression均为字符向量或字符串标量,则输出为行向量(或者,如果没有任何匹配项,则为空数组)。如果
str或expression有一个是字符向量元胞数组或字符串数组,另一个是字符向量或字符串标量,则输出是行向量元胞数组。输出元胞数组与输入数组具有相同的维度。如果
str和expression均为元胞数组或字符串数组,则它们的维度必须相同。输出是具有相同维度的元胞数组。
每个匹配项的结束索引,以行向量或元胞数组的形式返回,如下所示:
如果
str和expression均为字符向量或字符串标量,则输出为行向量(或者,如果没有任何匹配项,则为空数组)。如果
str或expression有一个是字符向量元胞数组或字符串数组,另一个是字符向量或字符串标量,则输出是行向量元胞数组。输出元胞数组与输入数组具有相同的维度。如果
str和expression均为元胞数组或字符串数组,则它们的维度必须相同。输出是具有相同维度的元胞数组。
有关匹配项的信息,以数值、元胞、字符串或结构体数组的形式返回。输出中的信息取决于您为 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 函数。
版本历史记录
在 R2006a 之前推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)