主要内容

正则表达式

本主题描述正则表达式是什么以及如何使用它们来搜索文本。正则表达式是灵活且强大的,尽管他们使用复杂的语法。正则表达式是一个替代品模式(自从R2020b),这是简单的定义和结果代码更容易阅读。有关更多信息,请参见构建模式表达式

什么是正则表达式?

正则表达式是定义了一个特定的字符序列模式。你通常使用正则表达式搜索文本的词相匹配的模式,例如,在解析程序输入或在处理一个文本块。

特征向量“乔? n \ w *’是一个正则表达式。它定义了一个模式,从字母开始是可选的这封信紧随其后h(“h ?”),然后跟着这封信ngydF4y2Ba,并与任意数量的目的单词字符,字符是字母,数字或下划线(表示“\ w *”)。这种模式匹配任何下列:

乔恩,约翰,乔纳森,约翰尼

正则表达式提供了一种独特的方法搜索的文本为特定子集的字符在文本。而不是找一个精确的匹配字符处理函数strfind正则表达式给你寻找一个特定的能力模式的字符。

例如,多种方式表达指标的速度是:

公里/小时公里/小时公里/小时公里/小时公里每小时

你可以找到任何上述条款的文本通过发行五个单独的搜索命令:

strfind(文本、公里/小时的);strfind(文本、公里/小时的);%等。

更有效,但是,您可以构建一个适用于所有这些搜索词的短语:

流程图描述逻辑正则表达式的例子。

把这句话翻译成一个正则表达式(在本节稍后解释)和你有:

模式=“k (ilo) ? m(一特)? (/ | \ sp \ s) h (r |我们)?”;

现在找到一个或多个条款仅使用一个命令:

文本= [“高速列车旅行250”,公里/小时和汽车的,速度120公里/小时。];正则表达式(文本、模式,“匹配”)
ans = 1×2单元阵列{千米每小时的}{km / h的}

有四种MATLAB®使用正则表达式函数支持搜索和替金宝app换字符。前三个是相似的在他们接受的输入值和输出值返回。详情,点击函数参考页面的链接。

函数 描述
正则表达式

匹配正则表达式。

regexpi

匹配正则表达式,忽略的情况。

regexprep

使用正则表达式替换文本的一部分。

regexptranslate

将文本转换为正则表达式。

当调用任何的前三个功能,通过正则表达式的文本解析和前两个输入参数。当调用regexprep通过一个额外的输入一个表达式,指定了一个替代模式。

步骤构建表达式

有三个步骤中使用正则表达式搜索文本为特定的术语:

  1. 识别独特模式的字符串

    这需要你想搜索文本分解成一组字符类型。这些字符类型可能是一系列的小写字母,美元符号后面跟着三个数字,然后一个小数点,等等。

  2. 每个模式表示为一个正则表达式

    使用元字符本文档中描述和运营商来表达每一段你的搜索模式作为一个正则表达式。然后结合这些表达式段划分为单一表达式使用在搜索。

  3. 调用适当的搜索功能

    通过文本你想解析到一个搜索功能,如正则表达式regexpi,或者文本替换函数,regexprep

本节中所示的示例搜索记录包含联系信息属于一群五个朋友。这些信息包括每个人的名字,电话号码,居住地,和电子邮件地址。我们的目标是从文本中提取特定的信息. .

联系人= {“哈利287-625-7315哥伦布,哦hparker@hmail.com”;“贾尼斯529-882-1759弗雷斯诺,CA jan_stephens@horizon.net”;“迈克793-136-0975里士满,弗吉尼亚州sue_and_mike@hmail.net”;“Nadine 648-427-9947坦帕,FL nadine_berry@horizon.net”;“杰森697-336-7728公司蒙特罗斯,jason_blake@mymail.com”};

的第一部分例子构建一个正则表达式,它代表了一个标准的电子邮件地址的格式。使用该表达式,然后示例搜索信息集团的一个朋友的电子邮件地址。联系信息的珍妮丝在第二行联系人单元阵列:

联系人{2}
ans = '珍妮丝529-882-1759弗雷斯诺,CA jan_stephens@horizon.net '

步骤1 -识别文本中的独特的模式

一个典型的电子邮件地址是由标准组件:用户的帐户名称,后跟一个@符号,叫用户的互联网服务提供商(ISP),一个点(段),和ISP所属的域。下表列出了这些组件在左列,并概括了每个组件的格式正确的列。

一个电子邮件地址的独特模式 每个模式的一般描述
从帐户名称开始
jan_stephens
一个或多个小写字母和下划线
添加的@
jan_stephens@
@标志
添加ISP
jan_stephens@horizon
一个或多个小写字母,没有凸显
添加一个点(段)
jan_stephens@horizon。
点(段)字符
完成域
jan_stephens@horizon.net
com

步骤2,每个模式表示为一个正则表达式

在这个步骤中,您在步骤1中一般格式导出翻译成段的正则表达式。然后把这些片段加起来形成整个表达式。

下表显示了广义格式最左边的列中每个字符模式的描述。(这是结转表的右列的步骤1)。第二列显示了运营商或元字符代表的角色模式。

每一段的描述 模式
一个或多个小写字母和下划线 (a-z_) +
@标志 @
一个或多个小写字母,没有凸显 [a - z] +
点(段)字符 \。
com (com |网)

这些模式组合成一个特征向量给出了完整的表达式:

电子邮件=“[a-z_] + @ [a - z] + \。(com |网);

步骤3——调用合适的搜索功能

在这个步骤中,您在步骤2中使用正则表达式推导出相匹配的一个朋友的电子邮件地址。使用正则表达式函数来执行搜索。

这是联系信息的列表显示在这一节中。每个人的记录占一行联系人单元阵列:

联系人= {“哈利287-625-7315哥伦布,哦hparker@hmail.com”;“贾尼斯529-882-1759弗雷斯诺,CA jan_stephens@horizon.net”;“迈克793-136-0975里士满,弗吉尼亚州sue_and_mike@hmail.net”;“Nadine 648-427-9947坦帕,FL nadine_berry@horizon.net”;“杰森697-336-7728公司蒙特罗斯,jason_blake@mymail.com”};

这是正则表达式,它代表了一个电子邮件地址,在步骤2:派生

电子邮件=“[a-z_] + @ [a - z] + \。(com |网);

调用正则表达式函数,传递的第二行联系人单元阵列和电子邮件正则表达式。这将返回电子邮件地址的珍妮丝。

正则表达式(联系人{2},电子邮件,“匹配”)
ans = 1×1单元阵列{“jan_stephens@horizon.net”}

MATLAB解析一个特征向量从左到右,“消费”的向量。如果找到匹配的字符,正则表达式记录的位置和简历解析特征向量,开始只是最近的比赛结束后。

犯同样的电话,但这一次的五人名单:

正则表达式(联系人{5},电子邮件,“匹配”)
ans = 1×1单元阵列{“jason_blake@mymail.com”}

你也可以寻找每个人的邮件地址列表中通过使用整个单元数组输入参数:

正则表达式(联系人、邮件、“匹配”);

运营商和字符

正则表达式可以包含字符、元字符运营商,标记,和标志,指定模式匹配,这些部分中描述:

元字符

元字符是字母,字母,数字和空格字符。使用它们来构建一个通用模式的字符。

元字符

描述

例子

任何单个字符,包括空格

“……是”比赛结束的连续5字符序列“是”

[c1c2c3]

任何字符包含在方括号中。以下字符处理:$ |。* + ?- - - - - -当不用于指示范围。

“(rp)是”匹配“雨”“痛苦”“.ain”

[c ^1c2c3]

任何字符不包含在方括号中。以下字符处理:$ |。* + ?- - - - - -当不用于指示范围。

“[^ * rp]还”匹配所有庸俗的序列,在结束“是”,除了“雨”“痛苦”‘*是‘。例如,它匹配“获得”,“躺”,或“虚空”

[c1- c2]

任何字符的范围c1通过c2

“[g]”匹配一个字符的范围一个通过G

\ w

任何字母、数字或下划线字符。对于英语字符集,\ w相当于(a-zA-Z_0-9)

“\ w *”标识一个单词组成的任何分组的字母,数字或下划线字符。

\ W

任何字符,不是字母,数字或下划线。对于英语字符集,\ W相当于[^ a-zA-Z_0-9]

“\ W *”标识一个术语,不是一个单词组成的任何分组的字母,数字或下划线字符。

\ s

任何空白字符;相当于[v \ f t \ n \ r \ \]

' \ w * n \ s '匹配单词结尾这封信ngydF4y2Ba,紧随其后的是一个空白字符。

\ S

任何非空白字符;相当于[^ \ v f t \ n \ r \ \]

' \ d \ S '匹配一个数字数字紧随其后的任何非空白字符。

\ d

任何数字;相当于[0 - 9]

“\ d *”匹配任意数量的连续数字。

\ D

任何数字字符;相当于(^ 0 - 9)

“\ w * \ D \ >”匹配单词,不以数字结尾。

上的\阿\ {N}

字符的八进制值N

“\ o {40}”与空格字符匹配,定义为八进制40

\ xNx \ {N}

字符的十六进制值N

“\ x2C”与逗号字符匹配,定义为十六进制2摄氏度

字符表示

操作符

描述

、一个

报警(嘟)

\ b

退格

\ f

换页

\ n

新行

r \

回车

\ t

水平选项卡

v \

垂直制表符

\字符

任何字符和特殊意义在你想匹配的正则表达式(例如,使用\ \匹配一个反斜杠)

量词

量词指定的次数模式必须发生在匹配的文本。

量词

发生的次数表达式

例子

expr *

0或更多次连续。

“\ w *”匹配一个单词的长度。

expr吗?

0次或1次。

“\ w * (\ . m) ?”匹配的话,可选的扩展00

expr +

1次以上连续。

' < img src = " \ w + \ . gif”>“匹配一个< img >HTML标签时,文件名包含一个或多个字符。

expr {m, n}

至少次,但不超过ngydF4y2Ba*连续。

{0,1}相当于吗?

\年代{4 8}比赛。4至8个非空白字符

expr {m,}

至少*连续。

{0}{1,}相当于*+,分别。

' < a href = " {1,} \ \ w . html”>“匹配一个<一>HTML标签时,文件名包含一个或多个字符。

expr {n}

完全ngydF4y2Ba*连续。

相当于{n, n}

“\ d {4}”比赛连续四位数。

量词可以出现在三种模式,如下表中所描述的。代表任何量词在前面的桌子上。

模式

描述

例子

expr

贪婪的表情:匹配尽可能多的字符。

考虑到文本' < tr > < td > < p > < / p > < / td >文本”,该表达式“* > < / ? t。”匹配所有字符之间< tr/ td >:

' < tr > < td > < p > < / p > < / td >文本”

expr吗?

懒惰的表达:根据需要几个字符相匹配。

考虑到文本' < tr > < td > < p > < / p > < / td >文本”,该表达式' < / t。* ? > '每场比赛结束括号(第一次出现的>):

' < tr > ' ' < td > < / td >的

expr+

占有欲强的表达:尽可能匹配,但不要重复扫描的任何部分文本。

考虑到文本' < tr > < td > < p > < / p > < / td >文本”,该表达式“* + > < / ? t。”不返回任何匹配,因为括号被使用. *,不是重新扫描。

分组操作符

分组操作符允许您捕获的令牌,一个操作符应用到多个元素,或禁用回溯在一个特定的群体。

分组操作符

描述

例子

(expr)

组的元素表达和获取令牌。

“乔? n \年代(\ w *)捕获一个令牌,其中包含的姓有名字的人约翰乔恩

(?:expr)

组,但不要捕捉标记。

”(?:[五个母音字母][^五个母音字母)){2}”比赛连续两个元音,后跟一个nonvowel模式,如“立刻”

没有分组,“[五个母音字母][^五个母音字母){2}”匹配一个元音两nonvowels紧随其后。

(? > expr)

组自动。不放弃集团内部完成匹配,而不获取令牌。

“(? >。*)Z”不匹配“AtoZ”,虽然“Z (?: *)。”所做的事。使用原子组,Z被使用. *并不是重新扫描。

(expr1 | expr2)

匹配表达式expr1或表达expr2

如果有一个匹配expr1,然后expr2将被忽略。

您可以包括吗?? >开括号后压制自动标记或组。

“(让|电话)\ w +”匹配单词包含,但不结束,电话

锚的表达式匹配一个特征向量或单词的开始或结束。

匹配……

例子

^ expr

输入文本的开始。

“^ M \ w *”匹配一个单词开始初的文本。

expr美元

输入文本。

“\ w * m美元”匹配单词结束的最后文本。

\ < expr

一个单词的开始。

“\ < n \ w *”匹配任何单词开始ngydF4y2Ba

expr \ >

一个单词的结束。

“\ w * e \ >”匹配任何词结束e

看看断言

看看断言寻找模式,立即预定的比赛之前或之后,但不匹配的一部分。

指针仍然在当前位置,和对应的字符测试表达式不捕获或丢弃。因此,断言可以匹配字符组重叠。

看看断言

描述

例子

expr(? =测试)

提前寻找相匹配的字符测试

“\ w * (? = ing)”其次是匹配条件荷兰国际集团(ing),如“飞”“秋天”在输入文本“飞行,而不是下降。”

expr(? !测试)

向前看不匹配的字符测试

“我(? ! ng)”匹配的实例不遵守ng

(? < = expr测试)

背后寻找相匹配的字符测试

(? < = re) \ w *’匹配条件,“重新”,如“新”,“使用”,“循环”在输入文本“更新、再利用、再循环”

(? < !测试)expr

后面找了不匹配的字符测试

“(? < ! \ d) (\ d) (? ! \ d)”匹配单一数字(数字不先于或遵循其他数字)。

如果你指定一个超前断言之前一个表达式,相当于一个逻辑操作

操作

描述

例子

(? =测试)expr

匹配两个测试expr

(? = [a - z])[^五个母音字母)”辅音相匹配。

(? !测试)expr

匹配expr和不匹配测试

”(? ![五个母音字母])[a - z]”辅音相匹配。

有关更多信息,请参见断言在正则表达式

逻辑和条件运算符

逻辑和条件操作符允许您测试的状态给定的条件,然后使用结果来确定哪个模式,如果有的话,来匹配。这些操作符支持逻辑金宝app如果如果/其他条件。(条件,请参阅看看断言)。

条件可以令牌,看看断言,或动态表情的形式(? @cmd)。动态表达式必须返回一个逻辑或数值。

条件运算符

描述

例子

expr1 | expr2

匹配表达式expr1或表达expr2

如果有一个匹配expr1,然后expr2将被忽略。

“(让|电话)\ w +”匹配单词开始电话

(?(电导率)expr)

如果条件气孔导度真正的,然后匹配expr

”(? ? @ispc) [a - z]: \ \)”匹配一个驱动器名称,如C: \当在Windows上运行®系统。

(?(电导率)expr1 | expr2)

如果条件气孔导度真正的,然后匹配expr1。否则,匹配expr2

“先生(s ?) \ . . * ?(?(1)她|他)\ w *’匹配文本,包括她的当文本开头夫人,或者包括他的当文本开头先生

令牌运营商

你标记的部分匹配文本定义通过将正则表达式的一部分包含在圆括号中。您可以参考标记的序列在文本(一个序数牌),或分配名称为更容易令牌代码维护和可读的输出。

序数牌运营商

描述

例子

(expr)

捕获在一个象征性的封闭表达式相匹配的字符。

“乔? n \年代(\ w *)捕获一个令牌,其中包含的姓有名字的人约翰乔恩

\ N

匹配N令牌。

“< (\ w +)。* >。* < / \ 1 > '捕捉标记的HTML标记,如“标题”从文本中' <标题>一些文本”< /名称>

(? (N) expr1 | expr2)

如果N找到th令牌,那么匹配expr1。否则,匹配expr2

“先生(s ?) \ . . * ?(?(1)她|他)\ w *’匹配文本,包括她的当文本开头夫人,或者包括他的当文本开头先生

叫牌运营商

描述

例子

(? <名称> expr)

捕获在一个命名的标记字符匹配的封闭表达式。

‘(? <月> \ d +) -(? <天> \ d +) -(? <年> \ d +) '创建指定的标记为一个月,一天,一年一个输入日期的形式mm-dd-yy

\ k <名称>

令牌被匹配的名字

' <(? <标记> \ w +)。* >。* < / \ k <标记> >”捕捉标记的HTML标记,如“标题”从文本中' <标题>一些文本”< /名称>

(?(名字)expr1 | expr2)

如果找到指定的令牌,然后匹配expr1。否则,匹配expr2

“先生(<性> s ?) \ . . * ?(?(性)她|他)\ w *’匹配文本,包括她的当文本开头夫人,或者包括他的当文本开头先生

请注意

如果一个表达式有嵌套的括号,MATLAB捕获令牌对应于最外层组括号。例如,搜索模式”(和(y |奖赏))”,MATLAB创建一个令牌“安德鲁”但不是“y”“报答”

有关更多信息,请参见令牌在正则表达式

动态表情

动态表达式允许您执行一个MATLAB命令或一个正则表达式来确定匹配的文本。

附上动态表达式的括号创建一个捕获组。

操作符

描述

例子

(? ? expr)

解析expr在比赛中,包括由此产生的术语表达。

当解析,expr必须对应于一个完整的、有效的正则表达式。动态表达式,使用反斜杠转义字符(\)需要两个反斜杠:一个最初的解析expr,一个完整的比赛。

' ^ (\ d +) ((? ? \ \ w美元{1}))”决定有多少字符匹配通过阅读一个数字开始比赛。动态表达式包含在第二组括号,由此导致捕获匹配令牌。例如,匹配“5 xxxxx”捕捉标记为“5”“XXXXX”

(? ? @cmd)

执行由MATLAB命令cmd,包括匹配的命令返回的输出表达式。

”({2})。? (? ? @fliplr(1美元))”发现至少四个字符回文,等“神父”

(? @cmd)

执行由MATLAB命令cmd,但丢弃任何输出命令返回。(有助于诊断正则表达式)。

‘\ w * ? (\ w) (? @disp(1美元))\ 1 \ w *’匹配单词,包括双字母(例如),并显示中间结果。

在动态表情,使用以下操作符定义替代条款。

替换操作符

描述

$ &0美元

输入文本的一部分,目前是匹配

美元的

输入文本的一部分,在当前匹配

美元的

输入文本的一部分,遵循当前匹配(使用$ "代表美元的)

$ N

Nth令牌

$ <名称>

叫牌

$ {cmd}

输出返回MATLAB执行命令时,cmd

有关更多信息,请参见动态的正则表达式

评论

评论操作符允许您插入注释你的代码,使其更易于维护。评论时忽视了MATLAB的文本匹配输入文本。

字符

描述

例子

(? #评论)

在正则表达式中插入注释。评论文本匹配输入时被忽略。

‘(?#Initial digit)\<\d\w+'包括评论和匹配词开始一个数字。

搜索的旗帜

搜索标记修改行为匹配表达式。

国旗

描述

(? -我)

匹配字母大小写(默认正则表达式regexprep)。

(我)?

字母大小写不匹配(默认regexpi)。

(?)

匹配点()模式中的任何字符(默认)。

(? - s)

的点模式匹配任何字符,不是一个换行符。

(? - m)

匹配^美元元字符的开始和结束文本(默认)。

(?)

匹配^美元元字符的开始和结束。

(? - x)

包括空格字符和注释时匹配(默认)。

x (?)

匹配时忽略空格字符和注释。使用“\”“\ #”匹配和空间#字符。

国旗的表达式修改后可以出现括号,如

(?我)\ w *

括号内或与一个冒号分开国旗(:),比如

(?我:\ w *)

后者的语法允许你改变行为的一部分表达式。

另请参阅

||||

相关的话题