regexpPattern
说明
创建与正则表达式匹配的模式。pat
= regexpPattern(expression
)
使用一个或多个名称-值对组参数指定其他选项。例如,您可以将 pat
= regexpPattern(expression
,Name,Value
)'IgnoreCase'
指定为 true
,以便在匹配时忽略大小写。
示例
对模式和正则表达式进行组合
使用 regexpPattern
指定模式,其中使用的正则表达式可用作文本搜索函数的输入。
查找以 c
开头并以 t
结尾且两者之间包含一个或多个元音字母的单词。
txt = "bat cat can car coat court CUT ct CAT-scan"; expression = 'c[aeiou]+t';
正则表达式 'c[aeiou]+t'
指定以下模式:
c
必须为第一个字符。c
必须后跟方括号内的一个字符[aeiou]
。括起的模式必须出现一次或多次,如
+
运算符所指示。t
必须为最后一个字符,括起的模式和t
之间没有任何字符。
提取该模式。请注意,单词 CUT
和 CAT
不匹配,因为它们是大写的。
pat = regexpPattern(expression); extract(txt,pat)
ans = 2x1 string
"cat"
"coat"
使用 regexpPattern
创建的模式可以与其他模式函数相结合来创建更复杂的模式。使用 whitespacePattern
和 lettersPattern
创建一个在正则表达式匹配后还匹配单词的新模式,然后提取新模式。
pat = regexpPattern(expression) + whitespacePattern + lettersPattern; extract(txt,pat)
ans = 2x1 string
"cat can"
"coat court"
忽略 newline
字符
创建一个包含 newline
字符的字符串。使用正则表达式 '.'
匹配除 newline
字符以外的任何字符。
txt = "First Line" + newline + "Second Line"
txt = "First Line Second Line"
expression = '.+';
正则表达式 '.+'
匹配一个或多个任意字符,包括 newline
字符。对模式匹配的次数进行计数。
pat = regexpPattern(expression); count(txt,pat)
ans = 1
创建一个新的正则表达式模式,但这次将 DotExceptNewline
指定为 true
,以使该模式不匹配 newline
字符。对模式匹配的次数进行计数。
pat = regexpPattern(expression,"DotExceptNewline",true);
count(txt,pat)
ans = 2
匹配时忽略表达式中的空白
创建字符串 txt
变量。
txt = "Hello World";
表达式 '. *'
仅匹配单个字符,因为 .
和 *
之间有空白。创建一个模式来匹配正则表达式 '. *'
,然后提取该模式。
expression = '. *';
pat = regexpPattern(expression);
extract(txt,pat)
ans = 10x1 string
"H"
"e"
"l"
"l"
"o "
"W"
"o"
"r"
"l"
"d"
创建一个新的正则表达式模式,但这次将 FreeSpacing
指定为 true
以忽略正则表达式中的空白。提取新模式。
pat = regexpPattern(expression,"FreeSpacing",true);
extract(txt,pat)
ans = "Hello World"
忽略正则表达式的大小写
查找以 c
开头、以 t
结尾且在这两个字母之间包含一个或多个元音字母的单词,不区分大小写。
txt = "bat cat can car coat court CUT ct CAT-scan"; expression = 'c[aeiou]+t';
正则表达式 'c[aeiou]+t'
指定以下模式:
c
必须为第一个字符。c
必须后跟方括号内的一个字符[aeiou]
。括起的模式必须出现一次或多次,如
+
运算符所指示。t
必须为最后一个字符,括起的模式和t
之间没有任何字符。
提取该模式。请注意,单词 CUT 和 CAT 与模式不匹配,因为它们是大写的。
pat = regexpPattern(expression); extract(txt,pat)
ans = 2x1 string
"cat"
"coat"
创建一个新的正则表达式模式,但这次将 IgnoreCase
指定为 true
以忽略正则表达式中的大小写。提取新模式。
pat = regexpPattern(expression,"IgnoreCase",true);
extract(txt,pat)
ans = 4x1 string
"cat"
"coat"
"CUT"
"CAT"
将 ^
和 $
定位点指定为行或文本定位点
元字符 ^
和 $
可用于指定行定位点或文本定位点。regexpPattern
使用的行为由 Anchors
选项指定。
将 txt
创建为包含 newline
字符的字符串。
txt = "cat" + newline + "bat" + newline + "rat";
正则表达式 '^.+?$' 匹配两个定位点之间的一个或多个字符。为此正则表达式创建一个模式,并将 Anchors
指定为 “text”
以便将 ^ 和 $ 定位点视为文本定位点。提取该模式。
expression = '^.+?$'; pat = regexpPattern(expression,"Anchors","text"); extract(txt,pat)
ans = "cat bat rat"
创建一个新的正则表达式模式,但这次将 Anchors
指定为 “line”
以便将 ^ 和 $ 定位点视为行定位点。提取新模式。
pat = regexpPattern(expression,"Anchors","line"); extract(txt,pat)
ans = 3x1 string
"cat"
"bat"
"rat"
输入参数
expression
— 正则表达式
字符向量 | 字符向量元胞数组 | 字符串数组
正则表达式,指定为字符向量、字符向量元胞数组或字符串数组。每个表达式可包含字符、元字符、运算符、标文和用于指定在 str
中匹配的模式的标志。
下表描述了正则表达式的各元素。
元字符
元字符表示字母、字母范围、数字和空格字符。使用它们来构造广义的字符模式。
元字符 | 描述 | 示例 |
---|---|---|
| 任何单个字符,包括空白 |
|
| 包含在方括号中的任意字符。下列字符将按字面意义进行处理: |
|
| 未包含在方括号中的任意字符。下列字符将按字面意义进行处理: |
|
|
|
|
| 任意字母、数字或下划线字符。对于英语字符集, |
|
| 字母、数字或下划线之外的任意字符。对于英语字符集, |
|
| 任意空白字符;等同于 |
|
| 任意非空白字符;等同于 |
|
| 任意数字;等同于 |
|
| 任意非数字字符;等同于 |
|
| 八进制值 |
|
| 十六进制值 |
|
字符表示
运算符 | 描述 |
---|---|
| 警报(蜂鸣) |
| 退格符 |
| 换页符 |
| 换行符 |
| 回车符 |
| 水平制表符 |
| 垂直制表符 |
| 正则表达式中您要从字面上匹配(例如,使用 |
限定符
限定符指定某个模式必须出现在匹配文本中的次数。expr
表示任意正则表达式。
限定符 | 表达式出现的次数 | 示例 |
---|---|---|
| 0 次或连续多次。 |
|
| 0 次或 1 次。 |
|
| 1 次或连续多次。 |
|
| 至少
|
|
| 至少连续
|
|
| 恰好连续 等效于 |
|
限定符可以以三种模式显示,如下表所述。q 表示上表中的任意限定符。
模式 | 描述 | 示例 |
---|---|---|
| 积极表达式:与尽可能多的字符匹配。 | 给定文本
|
| 消极表达式:与所需的尽可能少的字符匹配。 | 给定文本
|
| 主动表达式:最大程度地匹配,但不重新扫描文本的任何部分。 | 给定文本 |
分组运算符
分组运算符允许您捕获标文,将一个运算符应用于多个元素或在特定组中禁止追溯。标文是您通过将正则表达式的部分括在括号中而定义的匹配文本的部分。
分组运算符 | 描述 | 示例 |
---|---|---|
| 将表达式元素分组并捕获标文。 |
|
| 分组但不捕获标文。 |
不进行分组时, |
| 以原子方式分组。不在组中追溯以完成匹配,并且不捕获标文。 |
|
| 匹配表达式 如果存在与 您可以在左括号后包括 |
|
定位点
表达式中的定位点与文本或单词的开头或结尾匹配。
定位点 | 与以下项匹配 | 示例 |
---|---|---|
| 输入文本的开头。 |
|
| 输入文本的结尾。 |
|
| 单词开头。 |
|
| 单词结尾。 |
|
环顾断言
环顾断言查找紧邻预期匹配项前后但并非该匹配项一部分的模式。
指针停留在当前位置,并且将放弃或不捕获对应于 test
表达式的字符。因此,前向断言可匹配重叠字符组。
环顾断言 | 描述 | 示例 |
---|---|---|
| 向前查找与 |
|
| 向前查找与 |
|
| 向后查找与 |
|
| 向后查找与 |
|
如果您在表达式之前指定前向断言,则运算等同于逻辑 AND
。
运算 | 描述 | 示例 |
---|---|---|
| 同时与 |
|
| 匹配 |
|
逻辑和条件运算符
逻辑和条件运算符使您能够测试给定条件的状态,然后使用结果确定哪个模式(如果有)与下一条件匹配。这些运算符支持逻辑 OR
、if
或 if/else
条件。
条件可以是标文、环顾运算符或 (?@cmd)
形式的动态表达式。动态表达式必须返回逻辑值或数值。
条件运算符 | 描述 | 示例 |
---|---|---|
| 匹配表达式 如果存在与 |
|
| 如果条件 |
|
| 如果条件 |
|
标文运算符
标文是您通过将正则表达式的部分括在括号中而定义的匹配文本的部分。您可以按标文在文本中的顺序引用该标文(顺序标文),或将名称分配给标文以便于代码维护和使输出更易于阅读。
顺序标文运算符 | 描述 | 示例 |
---|---|---|
| 在标文中捕获与括起来的表达式匹配的字符。 |
|
命名标文运算符 | 描述 | 示例 |
---|---|---|
| 在命名标文中捕获与括起来的表达式匹配的字符。 |
|
注意
如果表达式具有嵌套括号,则 MATLAB® 捕获对应于最外层括号的标文。例如,给定搜索模式 '(and(y|rew))'
,MATLAB 将为 'andrew'
但不为 'y'
或 'rew'
创建一个标文。
注释
字符 | 描述 | 示例 |
---|---|---|
(?#comment) | 在正则表达式中插入注释。匹配输入时将忽略注释文本。 |
|
搜索标志
搜索标志修改匹配表达式的行为。在表达式中使用搜索标志的替代方法是传递 option
输入参数。
标志 | 描述 |
---|---|
(?-i) | 匹配字母大小写( |
(?i) | 不匹配字母大小写( |
(?s) | 将模式中的点 ( |
(?-s) | 将模式中的点与并非换行符的任意字符匹配。 |
(?-m) | 匹配文本开头和结尾的 |
(?m) | 匹配行开头和结尾的 |
(?-x) | 在匹配时包括空格字符和注释(默认值)。 |
(?x) | 在匹配时忽略空格字符和注释。使用 |
该标志修改的表达式可显示在括号后,例如
(?i)\w*
或显示在括号内并使用冒号 (:
) 与该标志分隔开,例如
(?i:\w*)
后面的语法允许您更改较大表达式的一部分的行为。
数据类型: char
| cell
| string
注意
regexpPattern
不支持反向引用、基于反向引用的条件和动态正则表达式。
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: 'DotExceptNewline',true,'FreeSpacing',false
DotExceptNewline
— 新行的点匹配
false
或 0
(默认) | true
或 1
newline
字符的点匹配,指定为由 'DotExceptNewline'
和逻辑标量组成的以逗号分隔的对组。将此选项设置为 0 (false) 表示从点匹配中省略 newline
字符。
示例: pat = regexpPattern('m.','DotExceptNewline',true)
FreeSpacing
— 匹配空白
false
或 0
(默认) | true
或 1
匹配空白字符,指定为由 'FreeSpacing'
和逻辑标量组成的以逗号分隔的对组。将此选项设置为 1 (true) 表示在匹配时忽略空白字符和注释。
示例: pat = regexpPattern('m.','FreeSpacing',false)
IgnoreCase
— 匹配时忽略大小写
false
或 0
(默认) | true
或 1
匹配时忽略大小写,指定为由 'IgnoreCase'
和逻辑标量组成的以逗号分隔的对组。将此选项设置为 1 (true) 表示在匹配时不区分大小写。
示例: pat = regexpPattern('m.','IgnoreCase',true)
Anchors
— 元字符处理
'text'
(默认) | 'line'
元字符处理,指定为以逗号分隔的对组,该对组由 'Anchors'
和下列值之一组成:
值 | 描述 |
---|---|
'text' | 将元字符 ^ 和 $ 视为文本定位点。这会将正则表达式匹配定位到文本的开头或结尾,可能跨多行。 |
'line' | 将元字符 ^ 和 $ 视为行定位点。这会将正则表达式匹配定位到文本中的行首或行尾。当您有多行文本并且不希望匹配跨多行时,此选项非常有用。 |
示例: pat = regexpPattern('\d+','Anchors','line')
版本历史记录
在 R2020b 中推出
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)