正则表达式,指定为字符向量、字符向量元胞数组或字符串数组。每个表达式可包含字符、元字符、运算符、标文和用于指定在 str 中匹配的模式的标志。
下表描述了正则表达式的各元素。
元字符
元字符表示字母、字母范围、数字和空格字符。使用它们来构造广义的字符模式。
元字符说明示例.任何单个字符,包括空白'..ain' 与以 'ain' 结尾的五个连续字符序列匹配。
[c1c2c3]包含在方括号中的任意字符。下列字符将按字面意义进行处理:$ | . * + ? 和 -(不用于指示范围时)。'[rp.]ain' 与 'rain'、'pain' 或 '.ain' 匹配。
[^c1c2c3]未包含在方括号中的任意字符。下列字符将按字面意义进行处理:$ | . * + ? 和 -(不用于指示范围时)。'[^*rp]ain' 与以 'ain' 结尾的所有由四个字母组成的序列('rain'、'pain' 和 '*ain' 除外)匹配。例如,它与 'gain'、'lain' 或 'vain' 匹配。
[c1-c2]c1 到 c2 范围中的任意字符'[A-G]' 与 A 到 G 范围中的单个字符匹配。
\w任意字母、数字或下划线字符。对于英语字符集,\w 等同于 [a-zA-Z_0-9]'\w*' 识别由字母、数字或下划线字符组成的词。
\W字母、数字或下划线之外的任意字符。对于英语字符集,\W 等同于 [^a-zA-Z_0-9]'\W*' 标识不是由任意字母、数字或下划线字符组合而成的词。
\s任意空白字符;等同于 [
\f\n\r\t\v]'\w*n\s' 与以字母 n 结尾且后跟空白字符的单词匹配。
\S任意非空白字符;等同于 [^
\f\n\r\t\v]'\d\S' 与数字(后跟任意非空白字符)匹配。
\d任意数字;等同于 [0-9]'\d*' 与任意数量的连续数字匹配。
\D任意非数字字符;等同于 [^0-9]'\w*\D\>' 与不以数字结尾的单词匹配。
\oN 或 \o{N}八进制值 N 的字符'\o{40}' 与八进制 40 定义的空格字符匹配。
\xN 或 \x{N}十六进制值 N 的字符'\x2C' 与十六进制 2C 定义的逗号字符匹配。
字符表示
运算符说明\a警报(蜂鸣)
\b退格符
\f换页符
\n换行符
\r回车符
\t水平制表符
\v垂直制表符
\char正则表达式中您要从字面上匹配(例如,使用 \\ 匹配单个反斜杠)的具有特殊含义的任意字符。
限定符
限定符指定某个模式必须出现在匹配文本中的次数。
限定符表达式出现的次数示例expr*0 次或连续多次。'\w*' 与任意长度的单词匹配。
expr?0 次或 1 次。'\w*(\.m)?' 与单词或以扩展名 .m 结尾(此条件为可选条件)的单词匹配。
expr+1 次或连续多次。'
' 与 HTML 标记匹配(当文件名包含一个或多个字符时)。
expr{m,n}至少 m 次,但不超过连续 n 次。
{0,1} 等效于 ?。'\S{4,8}' 与四到八个非空白字符匹配。
expr{m,}至少连续 m 次。
{0,} 和 {1,} 分别等效于 * 和 +。'' 与 HTML 标记匹配(当文件名包含一个或多个字符时)。
expr{n}恰好连续 n 次。
等效于 {n,n}。'\d{4}' 与四个连续数字匹配。
限定符可以以三种模式显示,如下表所述。q 表示上表中的任意限定符。
模式说明示例exprq积极表达式:与尽可能多的字符匹配。给定文本 '
text
',表达式 '?t.*>' 与介于 之间的所有字符匹配:
'
text
'
exprq?消极表达式:与所需的尽可能少的字符匹配。给定文本 '
text
',表达式 '?t.*?>' 在第一次出现右尖括号 (>) 时结束每个匹配项:
'
' '' ''
exprq+主动表达式:最大程度地匹配,但不重新扫描文本的任何部分。给定文本 '
text
',表达式 '?t.*+>' 不返回任何匹配项,这是因为右尖括号是使用 .* 捕获的且不进行重新扫描。
分组运算符
分组运算符允许您捕获标文,将一个运算符应用于多个元素或在特定组中禁止追溯。
分组运算符说明示例(expr)将表达式元素分组并捕获标文。'Joh?n\s(\w*)' 捕获一个标文,该标文包含名字为 John 或 Jon 的任何人的姓氏。
(?:expr)分组但不捕获标文。'(?:[aeiou][^aeiou]){2}' 与两个连续的元音后跟非元音(例如 'anon')的模式匹配。
不进行分组时,'[aeiou][^aeiou]{2}' 与元音后跟两个非元音匹配。
(?>expr)以原子方式分组。不在组中追溯以完成匹配,并且不捕获标文。'A(?>.*)Z' 与 'AtoZ' 不匹配,但 'A(?:.*)Z' 与其匹配。使用原子组时,Z 将使用 .* 进行捕获并且不进行重新扫描。
(expr1|expr2)匹配表达式 expr1 或表达式 expr2。
如果存在与 expr1 匹配的项,则将忽略 expr2。
您可以在左括号后包括 ?: 或 ?> 以禁用标文或以原子方式分组。'(let|tel)\w+' 匹配以 let 或 tel 开头的单词。
定位点
表达式中的定位点与文本或单词的开头或结尾匹配。
定位点与以下项匹配示例^expr输入文本的开头。'^M\w*' 与以 M 作为文本开头的单词匹配。
expr$输入文本的结尾。'\w*m$' 与以 m 作为文本结尾的单词匹配。
\
expr\>单词结尾。'\w*e\>' 与以 e 结尾的任何单词匹配。
环顾断言
环顾断言查找紧邻预期匹配项前后但并非该匹配项一部分的模式。
指针停留在当前位置,并且将放弃或不捕获对应于 test 表达式的字符。因此,前向断言可匹配重叠字符组。
环顾断言说明示例expr(?=test)向前查找与 test 匹配的字符。'\w*(?=ing)' 匹配后跟 ing 的词汇,例如输入文本 'Flying, not falling.' 中的 'Fly' 和 'fall'。
expr(?!test)向前查找与 test 不匹配的字符。'i(?!ng)' 匹配字母 i 的不后跟 ng 的实例。
(?<=test)expr向后查找与 test 匹配的字符。'(?<=re)\w*' 匹配紧跟 're' 的词汇,例如输入文本 'renew,
reuse, recycle' 中的 'new'、'use' 和 'cycle'
(?
如果您在表达式之前指定前向断言,则运算等同于逻辑 AND。
运算说明示例(?=test)expr同时与 test 和 expr 匹配。'(?=[a-z])[^aeiou]' 与辅音匹配。
(?!test)expr匹配 expr,但不匹配 test。'(?![aeiou])[a-z]' 与辅音匹配。
逻辑和条件运算符
逻辑和条件运算符允许您测试给定条件的状态,然后使用结果确定哪个模式(如果有)与下一条件匹配。这些运算符支持逻辑 OR、if 或 if/else 条件。
条件可以是标文、环顾运算符或 ([email protected]) 形式的动态表达式。动态表达式必须返回逻辑值或数值。
条件运算符说明示例expr1|expr2匹配表达式 expr1 或表达式 expr2。
如果存在与 expr1 匹配的项,则将忽略 expr2。'(let|tel)\w+' 匹配以 let 或 tel 开头的单词。
(?(cond)expr)如果条件 cond 为 true,则匹配 expr。'(?([email protected])[A-Z]:\\)' 匹配驱动器名称,例如 C:\(在 Windows® 系统上运行时)。
(?(cond)expr1|expr2)如果条件 cond 为 true,则匹配 expr1。否则,匹配 expr2。'Mr(s?)\..*?(?(1)her|his)
\w*' 匹配包含 her 的文本(当文本以 Mrs 开头时),或包含 his 的文本(当文本以 Mr 开头时)。
标文运算符
标文是您通过将正则表达式的部分括在括号中而定义的匹配文本的部分。您可以按标文在文本中的顺序引用该标文(顺序标文),或将名称分配给标文以便于代码维护和使输出更易于阅读。
顺序标文运算符说明示例(expr)在标文中捕获与括起来的表达式匹配的字符。'Joh?n\s(\w*)' 捕获一个标文,该标文包含名字为 John 或 Jon 的任何人的姓氏。
\N匹配第 N 个标文。'.*\1>' 从文本 '
Some text' 捕获 HTML 标记的标文,例如 'title'。
(?(N)expr1|expr2)如果找到第 N 个标文,则匹配 expr1。否则,匹配 expr2。'Mr(s?)\..*?(?(1)her|his)
\w*' 匹配包含 her 的文本(当文本以 Mrs 开头时),或包含 his 的文本(当文本以 Mr 开头时)。
命名标文运算符说明示例(?expr)在命名标文中捕获与括起来的表达式匹配的字符。'(?\d+)-(?\d+)-(?\d+)' 在 mm-dd-yy 形式的输入日期中创建命名月、日和年标文。
\k匹配 name 引用的标文。'\w+).*>.*\k>' 从文本 'Some text' 捕获 HTML 标记的标文,例如 'title'。
(?(name)expr1|expr2)如果找到命名标文,则匹配 expr1。否则,匹配 expr2。'Mr(?s?)\..*?(?(sex)her|his) \w*' 匹配包含 her 的文本(当文本以 Mrs 开头时),或包含 his 的文本(当文本以 Mr 开头时)。
注意
如果表达式具有嵌套括号,则 MATLAB® 捕获对应于最外层括号的标文。例如,给定搜索模式 '(and(y|rew))',MATLAB 将为 'andrew' 但不为 'y' 或 'rew' 创建一个标文。
动态正则表达式
动态表达式允许您执行 MATLAB 命令或正则表达式以确定要匹配的文本。
将动态表达式括起来的括号不创建捕获组。
运算符说明示例(??expr)解析 expr 并将得到的项包括在匹配表达式中。
解析后,expr 必须对应于完整的有效正则表达式。使用反斜杠转义字符 (\) 的动态表达式需要两个反斜杠:一个用于 expr 的初始解析,一个用于完整匹配。'^(\d+)((??\\w{$1}))' 通过读取匹配项开头的数字确定匹配的字符数。动态表达式括在另一组括号中,以便在标文中捕获生成的匹配项。例如,匹配 '5XXXXX' 将捕获 '5' 和 'XXXXX' 的标文。
([email protected])执行 cmd 表示的 MATLAB 命令,并将该命令返回的输出包括在匹配表达式中。'(.{2,}).?([email protected]($1))' 查找长度至少为四个字符的回文,例如 'abba'。
([email protected])执行 cmd 表示的 MATLAB 命令,但放弃该命令返回的任何输出。(对诊断正则表达式有帮助。)'\w*?(\w)([email protected]($1))\1\w*' 匹配包括双字母(例如 pp)的单词并显示中间结果。
在动态表达式中,使用下列运算符定义替代文本。
替代运算符说明$& 或 $0当前作为匹配项的输入文本部分
$`位于当前匹配项之前的输入文本部分
$'紧随当前匹配项的输入文本部分(使用 $'' 表示 $')
$N第 N 个标文
$命名标文
${cmd}在 MATLAB 执行命令 cmd 时返回的输出
注释
字符说明示例(?#comment)在正则表达式中插入注释。匹配输入时将忽略注释文本。'(?# Initial digit)\
搜索标志
搜索标志修改匹配表达式的行为。在表达式中使用搜索标志的替代方法是传递 option 输入参数。
标志说明(?-i)匹配字母大小写(regexp 和 regexprep 的默认值)。
(?i)不匹配字母大小写(regexpi 的默认值)。
(?s)将模式中的点 (.) 与任意字符匹配(默认值)。
(?-s)将模式中的点与并非换行符的任意字符匹配。
(?-m)匹配文本开头和结尾的 ^ 和 $ 元字符(默认值)。
(?m)匹配行开头和结尾的 ^ 和 $ 元字符。
(?-x)在匹配时包括空格字符和注释(默认值)。
(?x)在匹配时忽略空格字符和注释。使用 '\
' 和 '\#' 匹配空白和 # 字符。
该标志修改的表达式可显示在括号后,例如
(?i)\w*
或显示在括号内并使用冒号 (:) 与该标志分隔开,例如
(?i:\w*)
后面的语法允许您更改较大表达式的一部分的行为。
数据类型:char | cell | string