正则表达式是字符序列,它定义一个特定的模式。通常使用一个正则表达式搜索文本的一组词相匹配的图案,例如,在解析程序的输入或当处理文本块。
字符向量“乔? n \ w *’
是正则表达式的一个示例。它定义了以字母开头的模式乔
中,任选地随后通过信H
('H?'
),然后是字母ngydF4y2Ba
,并以任意数量的单词字符,即字母、数字或下划线(由'\ W *'
)。这种模式匹配的以下内容:
乔恩,约翰,乔纳森,约翰尼
正则表达式提供了一种独特的方法来搜索文本中的特定字符子集。而不是像处理函数那样寻找精确的字符匹配strfind
,正则表达式使您能够查找特定的模式的字符。
例如,表达速度的度量率的几种方法是:
公里/小时公里/小时公里/小时公里/小时小时公里
您可以找到任何上述条款在您的文本发出五个单独的搜索命令:
strfind(文本、“公里/小时”);strfind(文本、公里/小时的);%等。
为了更有效的,但是,你可以建立一个适用于所有这些搜索词的一个短语:
把这个短语翻译成一个正则表达式(将在本节后面进行解释),你会得到:
模式=“k (ilo) ? m(一特)? (/ | \ sp \ s) h (r |我们)?”;
现在,找到只使用一个命令条款的一种或多种:
文本= [“时速250的高速列车”,…“汽车旁边的公里每小时”,…“时速120公里。”];正则表达式(文本、模式,“匹配”)
ANS = 1×2单元阵列{ '公里每小时'} { '公里/小时'}
有四个MATLAB®支持使用正则表达式搜索和替换字万博1manbetx符的函数。前三个在它们接受的输入值和返回的输出值方面是相似的。有关详细信息,请单击到功能参考页面的链接。
函数 | 描述 |
---|---|
正则表达式 |
匹配正则表达式。 |
regexpi |
匹配正则表达式,忽略大小写。 |
regexprep |
使用正则表达式替换部分文本。 |
regexptranslate |
将文本转换为正则表达式。 |
在调用前三个函数时,传递要解析的文本和前两个输入参数中的正则表达式。当调用regexprep
,传递一个附加的输入,该输入是一个表达式,该表达式指定替换的模式。
使用正则表达式搜索特定术语的文本需要三个步骤:
这需要将要搜索的文本分成类似字符类型的组。这些字符类型可以是一系列小写字母、一个美元符号、三个数字和一个小数点,等等。
使用元字符和本文档中描述的操作符,以将搜索模式的每个片段表示为正则表达式。然后将这些表达式段组合成在搜索中使用的单个表达式。
本节中显示的示例搜索包含属于5个朋友组的联系信息的记录。这些信息包括每个人的姓名、电话号码、居住地和电子邮件地址。目标是从文本中提取具体信息。
联系人= {…“哈利287-625-7315俄亥俄州哥伦布hparker@hmail.com”;…Janice 529-882-1759弗雷斯诺,加州jan_stephens@horizon.net;…“Mike 793-136-0975里士满,弗吉尼亚州sue_and_mike@hmail.net”;…“纳丁648-427-9947佛罗里达州坦帕市nadine_berry@horizon.net”;…“Jason 697-336-7728 Montrose, CO jason_blake@mymail.com”};
的例子的第一部分中建立一个正则表达式表示一个标准的电子邮件地址的格式。使用该表达式,示例,然后搜索一群朋友之一的电子邮件地址的信息。对于卫兰联络信息是在2排联系人
单元阵列:
联系人{2}
ANS = '卫529-882-1759弗雷斯诺,CA jan_stephens@horizon.net'
典型的电子邮件地址由标准组件组成:用户的帐户名,后跟@符号,用户的互联网服务提供商(ISP)的名称,一个点(句点),以及ISP所属的域名。下表在左侧列中列出了这些组件,并在右侧列中概括了每个组件的格式。
电子邮件地址的独特模式 | 每个模式的一般描述 |
---|---|
从帐户名开始jan_stephens 。 |
一个或多个小写字母和下划线 |
添加的@ “jan_stephens@ 。 |
@ 标志 |
添加ISPjan_stephens @天涯 。 |
一个或多个小写字母,无下划线 |
加点(句号)jan_stephens @天涯。 。 |
点(段)字符 |
完成域jan_stephens@horizon.net |
com 或净 |
在此步骤中,将第1步中派生的通用格式转换为正则表达式的段。然后将这些片段相加形成整个表达式。
下表在最左列中显示了每个字符模式的通用格式描述。(这是从步骤1中表的右列结转过来的。)第二列显示表示字符模式的操作符或元字符。
各段描述 | 模式 |
---|---|
一个或多个小写字母和下划线 | (a-z_) + |
@ 标志 |
@ |
一个或多个小写字母,无下划线 | [a - z] + |
点(段)字符 | \。 |
com 或净 |
(COM |网) |
装配这些模式为一个字符向量为您提供了完整的表达式:
电子邮件=“[a-z_] + @ [a - z] + \。(com |网);
在此步骤中,您将使用在步骤2中派生的正则表达式来匹配组中一个朋友的电子邮件地址。使用正则表达式
函数来执行搜索。
下面是本节前面显示的联系人信息列表。每个人的战绩占据的一排联系人
单元阵列:
联系人= {…“哈利287-625-7315俄亥俄州哥伦布hparker@hmail.com”;…Janice 529-882-1759弗雷斯诺,加州jan_stephens@horizon.net;…“Mike 793-136-0975里士满,弗吉尼亚州sue_and_mike@hmail.net”;…“纳丁648-427-9947佛罗里达州坦帕市nadine_berry@horizon.net”;…“Jason 697-336-7728 Montrose, CO jason_blake@mymail.com”};
这是表示电子邮件地址的正则表达式,在步骤2中派生:
电子邮件=“[a-z_] + @ [a - z] + \。(com |网);
调用正则表达式
函数的第2行联系人
单元格阵列和电子邮件
正则表达式。这将返回的电子邮件地址贾尼丝。
正则表达式(联系人{2},电子邮件,“匹配”)
ans = 1×1单元格数组{'jan_stephens@horizon.net'}
MATLAB从左到右解析字符向量,在过程中“消耗”向量。如果找到匹配的字符,正则表达式
记录的位置,并恢复解析特征向量,开始只是最近的比赛结束后。
做出同样的电话,但这次是第五人名单:
正则表达式(联系人{5},电子邮件,“匹配”)
ans = 1×1单元格数组{'jason_blake@mymail.com'}
您也可以搜索电子邮件地址的每个人在列表中使用整个单元格数组的输入参数:
正则表达式(联系人,电子邮件,“匹配”);
正则表达式可以包含字符、元字符、操作符、标记和指定匹配模式的标志,如下所述:
元字符表示字母、字母范围、数字和空格字符。使用它们来构建一个通用的字符模式。
元字符 |
描述 |
例子 |
---|---|---|
|
任何单个字符,包括空格 |
|
|
方括号内的任何字符。以下字符按字面意思处理: |
|
|
方括号中不包含的任何字符。以下字符按字面意思处理: |
|
|
范围内的任何字符 |
|
|
任何字母、数字或下划线字符。对于英文字符集, |
|
|
非字母、数字或下划线的任何字符。对于英文字符集, |
|
|
任何空格字符;相当于 |
|
|
任何非空白字符;相当于 |
|
|
任何数字;相当于 |
|
|
任何非数字字符;相当于 |
|
|
八进制值的字符 |
|
|
十六进制值的字符 |
|
操作符 |
描述 |
---|---|
|
报警(嘟) |
|
退格 |
|
换页 |
|
新队 |
|
回车 |
|
水平选项卡 |
|
垂直制表符 |
|
正则表达式中您想要逐字匹配的具有特殊含义的任何字符(例如,使用) |
量词指定次数的模式必须发生在匹配的文本。
量词 |
匹配表达式时,它发生… |
例子 |
---|---|---|
|
0次或更多次连续。 |
|
|
0次或1次。 |
|
|
连续1次或多次。 |
|
|
至少
|
|
|
至少
|
|
|
究竟 相当于 |
|
量词可以出现在三种模式,如下表中所述。q表示上表中的任何量词。
模式 |
描述 |
例子 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
贪婪表达式:匹配尽可能多的字符。 |
鉴于文 文本 p> TD>',该表达式 文本 p> TD>'
懒惰的表现:比赛的几个字符是必要的。 鉴于文 文本 p> TD>',该表达式 所有格表达式:尽量匹配,但不要重新扫描文本的任何部分。 鉴于文 文本 p> TD>',该表达式 |
分组操作符允许您捕获令牌、将一个操作符应用于多个元素或禁用特定组中的回溯。
分组操作符 |
描述 |
例子 |
---|---|---|
|
表达和捕获令牌的组的元素。 |
|
|
组,但不捕获令牌。 |
没有分组, |
|
组原子。不要走回头路组内完成了比赛,并没有捕捉标记。 |
|
|
匹配表达式 如果有匹配 您可以包括 |
|
表达式中的锚匹配字符向量或单词的开始或结束。
锚 |
匹配的... |
例子 |
---|---|---|
|
输入文本的开头。 |
|
|
输入文本的结束。 |
|
|
单词的开头。 |
|
|
单词的结尾。 |
|
Lookaround断言查找紧接在预期匹配之前或之后但不属于匹配的模式。
指针保持在当前位置,以及字符对应于测试
表达式不被捕获或丢弃。因此,提前断言可以匹配重叠的字符组。
看看断言 |
描述 |
例子 |
---|---|---|
|
预先查找匹配的字符 |
|
|
向前查找不匹配的字符 |
|
|
看看后面的字符匹配 |
|
|
看看后面的不匹配字符 |
|
如果指定了前向断言之前一个表达式,其操作相当于一个逻辑和
。
操作 |
描述 |
例子 |
---|---|---|
|
匹配两个 |
|
|
匹配 |
|
有关更多信息,请参见正则表达式中的提前断言。
逻辑和条件运算符允许您测试给定条件的状态,然后使用结果来确定接下来要匹配的模式(如果有的话)。这些操作符支持逻辑万博1manbetx或
和如果
或如果/其他
条件。(和
条件,请参阅看看断言)。
条件可以令牌,看看断言,或动态表情的形式(?@cmd)
。动态表达式必须返回逻辑值或数值。
条件运算符 |
描述 |
例子 |
---|---|---|
|
匹配表达式 如果有匹配 |
|
|
如果条件 |
|
|
如果条件 |
|
标记是匹配文本的一部分,通过将正则表达式的一部分括在括号中来定义。您可以按文本中的顺序引用标记(序号标记),或者为标记分配名称,以方便代码维护和输出可读性。
序令牌操作 |
描述 |
例子 |
---|---|---|
|
捕获在令牌匹配封闭表达式的所有字符。 |
|
|
匹配 |
|
|
如果 |
|
叫牌运营商 |
描述 |
例子 |
---|---|---|
|
在命名标记中捕获与包含的表达式匹配的字符。 |
|
|
匹配by引用的令牌 |
|
|
如果发现指定的标记,然后匹配 |
|
如果表达式嵌套了括号,MATLAB会捕获与最外层括号对应的记号。例如,给定搜索模式”(和(y |奖赏))”
, MATLAB创建一个令牌“安德鲁”
但不为“y”
或“报答”
。
有关更多信息,请参见正则表达式中的标记。
动态表情让你执行MATLAB命令或正则表达式来确定文本相匹配。
将动态表达式括起来的括号可以做到这一点不创建捕获组。
操作符 |
描述 |
例子 |
---|---|---|
|
解析 当解析, |
|
|
执行由表示的MATLAB命令 |
|
|
执行由表示的MATLAB命令 |
|
在动态表达式中,使用以下操作符定义替换术语。
更换运营商 |
描述 |
---|---|
|
当前匹配的输入文本的一部分 |
|
输入文本的部分先于当前的匹配 |
|
当前匹配项之后的输入文本的一部分(使用 |
|
|
|
叫牌 |
|
输出时返回MATLAB执行该命令, |
有关更多信息,请参见动态正则表达式。
该评论
运算符使您可以在代码中插入注释,从而使代码更易于维护。MATLAB在与输入文本进行匹配时忽略注释的文本。
字符 |
描述 |
例子 |
---|---|---|
(?#评论) |
插入在正则表达式的注释。匹配输入时,注释文本将被忽略。 |
|
搜索标志修改匹配表达式的行为。
国旗 |
描述 |
---|---|
(? -我) |
匹配字母大小写(默认为 |
(?一世) |
不匹配字母大小写(默认为 |
(?) |
匹配点( |
(?-s) |
在这不是一个换行符的任何字符模式匹配点。 |
(? - m) |
匹配 |
(M +) |
匹配 |
(? - x) |
在匹配时包括空格字符和注释(默认)。 |
x (?) |
当匹配时忽略空格字符和注释。使用 |
标记所修改的表达式可以出现在括号之后,例如
(?我)\ w *
或括号内和从标志分离用冒号(:
),比如
(I:\ W *)
后者的语法允许你去改变一个更大的表达式的一部分。
正则表达式
|regexpi
|regexprep
|regexptranslate