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 = 2×1 string
"cat"
"coat"
使用 regexpPattern 创建的模式可以与其他模式函数相结合来创建更复杂的模式。使用 whitespacePattern 和 lettersPattern 创建一个在正则表达式匹配后还匹配单词的新模式,然后提取新模式。
pat = regexpPattern(expression) + whitespacePattern + lettersPattern; extract(txt,pat)
ans = 2×1 string
"cat can"
"coat court"
创建一个包含 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 = 10×1 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 = 2×1 string
"cat"
"coat"
创建一个新的正则表达式模式,但这次将 IgnoreCase 指定为 true 以忽略正则表达式中的大小写。提取新模式。
pat = regexpPattern(expression,"IgnoreCase",true);
extract(txt,pat)ans = 4×1 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 = 3×1 string
"cat"
"bat"
"rat"
输入参数
正则表达式,指定为字符向量、字符向量元胞数组或字符串数组。每个表达式可包含字符、元字符、运算符、词元和用于指定在 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
newline 字符的点匹配,指定为由 'DotExceptNewline' 和逻辑标量组成的以逗号分隔的对组。将此选项设置为 0 (false) 表示从点匹配中省略 newline 字符。
示例: pat = regexpPattern('m.','DotExceptNewline',true)
匹配空白字符,指定为由 'FreeSpacing' 和逻辑标量组成的以逗号分隔的对组。将此选项设置为 1 (true) 表示在匹配时忽略空白字符和注释。
示例: pat = regexpPattern('m.','FreeSpacing',false)
匹配时忽略大小写,指定为由 'IgnoreCase' 和逻辑标量组成的以逗号分隔的对组。将此选项设置为 1 (true) 表示在匹配时不区分大小写。
示例: pat = regexpPattern('m.','IgnoreCase',true)
元字符处理,指定为以逗号分隔的对组,该对组由 'Anchors' 和下列值之一组成:
| 值 | 描述 |
|---|---|
'text' | 将元字符 ^ 和 $ 视为文本定位点。这会将正则表达式匹配定位到文本的开头或结尾,可能跨多行。 |
'line' | 将元字符 ^ 和 $ 视为行定位点。这会将正则表达式匹配定位到文本中的行首或行尾。当您有多行文本并且不希望匹配跨多行时,此选项非常有用。 |
示例: pat = regexpPattern('\d+','Anchors','line')
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。
版本历史记录
在 R2020b 中推出
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)