正则表达式是定义某种模式的字符序列。通常使用正则表达式在文本中搜索匹配模式的一组单词,例如,在解析程序输入或处理文本块时。
特征向量'joh?n \ w *'
是正则表达式的一个例子。它定义了以字母开头的模式乔
,后面可选加字母h
(“h ?”
),然后是字母ngydF4y2Ba
,并以任何数量的结尾单词字符,即字母,数字或下划线的字符(指示“\ w *”
).该模式匹配以下任何一个:
Jon,John,Jonathan,Johnny
正则表达式提供了一种独特的方法,可以在该文本中搜索一段特定字符子集的文本。与您一样,而不是寻找确切的字符匹配strfind
,正则表达式提供了查找特定对象的能力图案的字符。
例如,表示公制速率的几种方法有:
公里/小时公里/小时公里/小时公里/小时公里每小时
您可以通过发出五个单独的搜索命令在文本中找到任何上述术语:
strfind(文本、公里/小时的);strfind(文本、公里/小时的);%等。
然而,为了更有效,你可以构建一个适用于所有这些搜索词的短语:
将此短语翻译成正则表达式(要在本节后面解释),并且您有:
模式='k(ilo)?m(eters)?(/ | \ sper \ s)h(r |我们)?';
现在只需使用一个命令就可以定位一个或多个术语:
text = ['高速火车在250'旅行,......“汽车旁边的时速”,......'以120 km / h旅行。];regexp(文本,模式,'比赛')
ans ='千米/小时''km / h'
有四个MATLAB®支持使用正则表达式搜索和替换字万博1manbetx符的函数。前三个在它们接受的输入值中类似,它们返回的输出值。有关详细信息,请单击“函数参考”页面的链接。
函数 | 描述 |
---|---|
正则表达式 |
匹配正则表达式。 |
regexpi |
匹配正则表达式,忽略大小写。 |
regexprep |
使用正则表达式替换部分文本。 |
regexptranslate |
将文本转换为正则表达式。 |
当调用前三个函数中的任何一个时,在前两个输入参数中传递要解析的文本和正则表达式。当调用regexprep
,传递一个额外的输入,该输入是指定替换模式的表达式。
使用正则表达式有三个步骤,以获取特定术语的文本:
这需要打破要搜索的文本,以与类似字符类型的组。这些字符类型可以是一系列小写字母,美元符号后跟三个数字,然后是小数点等。
使用元字符以及本文档中描述的操作符,以将搜索模式的每个部分表示为正则表达式。然后将这些表达式段合并成单个表达式用于搜索。
- - - - - -调用适当的搜索功能
本节中显示的示例搜索一条记录,该记录包含属于一个由5个朋友组成的群组的联系信息。这些信息包括每个人的姓名、电话号码、居住地和电子邮件地址。目标是从文本中提取特定的信息。
联系人= {......“哈里287-625-7315哥伦布,OH hparker@hmail.com”;......'Janice 529-882-1759 Fresno,CA Jan_Stephens@horizon.net';......'迈克793-136-0975里士满,va sue_and_mike@hmail.net';......'Nadine 648-427-9947 Tampa, FL nadine_berry@horizon.net';......'杰森697-336-7728蒙特罗斯,Co Jason_Blake@mymail.com'};
示例的第一部分构建了一个正则表达式,它表示标准电子邮件地址的格式。然后,该示例使用该表达式搜索其中一个朋友组的电子邮件地址信息。贾尼斯的联系方式在第二排联系人
单元格阵列:
联系人{2}
ANS = Janice 529-882-1759 Fresno,CA Jan_Stephens@horizon.net
典型的电子邮件地址由标准组件组成:用户的帐户名称,后跟@ sign,用户的Internet服务提供商(ISP)的名称,DOT(时段)以及ISP所属的域。下表在左栏中列出了这些组件,并概括了右栏中每个组件的格式。
电子邮件地址的唯一模式 | 每个模式的一般描述 |
---|---|
从帐户名称开始jan_stephens ... |
一个或多个小写字母和下划线 |
添加 '@ 'Jan_Stephens @ ... |
@ 标志 |
添加ISP.jan_stephens@horizon ... |
一个或多个小写字母,没有下划线 |
添加点(期间)jan_stephens@horizon。 ... |
点(时期)字符 |
完成域jan_stephens@horizon.net |
com 或者净 |
在此步骤中,您将步骤1中导出的一般格式转换为正则表达式的段。然后,您将这些段添加在一起以形成整个表达式。
下表显示了最左边一列中每个字符模式的通用格式描述。(这是在步骤1中从表的右边一列进行的。)第二列显示表示字符模式的操作符或元字符。
每个段的描述 | 图案 |
---|---|
一个或多个小写字母和下划线 | (a-z_) + |
@ 标志 |
@ |
一个或多个小写字母,没有下划线 | [A-Z] + |
点(时期)字符 | \。 |
com 或者净 |
(com |网) |
将这些模式组合成一个字符向量就可以得到完整的表达式:
电子邮件='[a-z _] + @ [a-z] + \。(com | net)';
在此步骤中,您可以使用步骤2中导出的正则表达式来匹配该组中的一个朋友的电子邮件地址。使用正则表达式
函数执行搜索。
下面是本节前面显示的联系信息列表。每个人的记录占据一行联系人
单元格阵列:
联系人= {......“哈里287-625-7315哥伦布,OH hparker@hmail.com”;......'Janice 529-882-1759 Fresno,CA Jan_Stephens@horizon.net';......'迈克793-136-0975里士满,va sue_and_mike@hmail.net';......'Nadine 648-427-9947 Tampa, FL nadine_berry@horizon.net';......'杰森697-336-7728蒙特罗斯,Co Jason_Blake@mymail.com'};
这是表示电子邮件地址的正则表达式,如第2步派生的:
电子邮件='[a-z _] + @ [a-z] + \。(com | net)';
打电话给正则表达式
函数的第2行联系人
单元格数组电子邮件
正则表达式。这是贾尼斯的邮箱地址。
正则表达式(联系人{2},电子邮件,'比赛')
ans =“jan_stephens@horizon.net”
MATLAB从左到右解析一个字符向量,“消费”这个向量。如果找到匹配的字符,正则表达式
记录位置并在最近的匹配结束后开始解析字符向量。
打同样的电话,但这次是给名单上的第五个人:
正则表达式(联系人{5},电子邮件,'比赛')
ans =“jason_blake@mymail.com”
您还可以使用输入参数的整个单元格数组搜索列表中每个人的电子邮件地址:
正则表达式(联系人、邮件、'比赛');
正则表达式可以包含指定模式以匹配的字符,元字符,运算符,令牌和标志,如这些部分中所述:
元字符代表字母,字母范围,数字和空格字符。使用它们来构建一个广义的字符模式。
元字符 |
描述 |
例子 |
---|---|---|
|
任何单一的字符,包括空格 |
|
|
方括号内包含的任何字符。以下字符按字面意思处理: |
|
|
方括号内未包含的任何字符。以下字符按字面意思处理: |
|
|
范围内的任何角色 |
|
|
任何字母,数字或下划线字符。对于英语字符集, |
|
|
任何不是字母,数字或下划线的字符。对于英语字符集, |
|
|
任何空白字符;相当于 |
|
|
任何非空白字符;相当于 |
|
|
任何数字数字;相当于 |
|
|
任何数字字符;相当于 |
|
|
八万价值的特征 |
|
|
十六进制值的特征 |
|
操作员 |
描述 |
---|---|
|
警报(哔哔) |
|
退格 |
|
换页 |
|
新行 |
|
回车 |
|
水平标签 |
|
垂直标签 |
|
任何在正则表达式中具有特殊含义的字符,您希望按字面意义匹配(例如,use |
限定符指定模式在匹配文本中必须出现的次数。
量词 |
匹配表达式时,它发生… |
例子 |
---|---|---|
|
连续0或更多次。 |
|
|
0乘以1乘以。 |
|
|
连续1次或更多。 |
|
|
至少
|
|
|
至少
|
|
|
完全 相当于 |
|
量词可以以三种方式出现,如下表所示。问表示上一表中的任何量词。
模式 |
描述 |
例子 |
||||
---|---|---|---|---|---|---|
|
贪婪的表达:匹配尽可能多的字符。 |
考虑到文本
|
||||
|
惰性表达式:匹配尽可能少的字符。 |
考虑到文本
|
分组操作符允许您捕获令牌、将一个操作符应用于多个元素或在特定组中禁用回溯。
分组操作符 |
描述 |
例子 |
---|---|---|
|
对表达式和捕获标记的元素进行分组。 |
|
|
小组,但不要捕获令牌。 |
没有分组, |
|
组自动。不要在组内回溯以完成匹配,也不要捕获令牌。 |
|
|
匹配表达式 如果有匹配 你可以包括 |
|
表达式中的锚匹配字符向量或单词的开头或结尾。
锚 |
匹配…… |
例子 |
---|---|---|
|
输入文本的开头。 |
|
|
输入文本的结尾。 |
|
|
单词的开头。 |
|
|
一个词的结尾。 |
|
LookAround断言查找立即在预期匹配之前立即或遵循预期匹配的模式,但不是匹配的一部分。
指针保持在当前位置,而对应于测试
表达未被捕获或丢弃。因此,看法断言可以匹配重叠的字符组。
PookAround断言 |
描述 |
例子 |
---|---|---|
|
向前查找匹配的字符 |
|
|
提前查找不匹配的字符 |
|
|
查找匹配的字符 |
|
|
查找不匹配的字符 |
|
如果指定了前向断言前表达式,操作相当于逻辑和
.
手术 |
描述 |
例子 |
---|---|---|
|
匹配两者 |
|
|
匹配 |
|
有关更多信息,请参阅正则表达式中的超前断言.
逻辑和条件运算符允许您测试给定条件的状态,然后使用结果确定哪个模式,如果有的话,以匹配下一个模式。这些运营商支持逻辑万博1manbetx或者
和如果
或者如果/其他
状况。(为了和
条件,参见看看断言.)
条件可以是令牌,看看断言, 或者动态表达式形式(? @cmd)
.动态表达式必须返回逻辑或数值。
条件运算符 |
描述 |
例子 |
---|---|---|
|
匹配表达式 如果有匹配 |
|
|
如果条件 |
|
|
如果条件 |
|
令牌是匹配文本的部分,它通过括在括号中的正则表达式的部分来定义。您可以在文本(序数令牌)中的序列中引用令牌,或者为更容易的代码维护和可读输出分配令牌的名称。
序数牌运营商 |
描述 |
例子 |
---|---|---|
|
在标记中捕获与括起来的表达式匹配的字符。 |
|
|
匹配 |
|
|
如果 |
|
命名为令牌运营商 |
描述 |
例子 |
---|---|---|
|
捕获命名令牌符合随附表达式的字符。 |
|
|
匹配所提到的令牌 |
|
|
如果找到指定的令牌,则进行匹配 |
|
如果表达式有嵌套的括号,MATLAB会捕获与最外层括号集对应的标记。例如,给定搜索模式'(和(y | rew))'
,Matlab创造了一个令牌'安德鲁'
但不是“y”
或者'rew'
.
有关更多信息,请参阅正则表达式的令牌.
动态表达式允许您执行MATLAB命令或正则表达式来确定要匹配的文本。
括在一起动态表达式的括号不是创建捕获组。
操作员 |
描述 |
例子 |
---|---|---|
|
解析 解析后, |
|
|
执行表示的MATLAB命令 |
|
|
执行表示的MATLAB命令 |
|
在动态表达式中,使用以下运算符定义替换项。
替换操作符 |
描述 |
---|---|
|
当前匹配的输入文本的一部分 |
|
当前匹配之前的输入文本的一部分 |
|
当前匹配的输入文本的部分(使用 |
|
|
|
命名为令牌 |
|
当MATLAB执行命令时返回的输出, |
有关更多信息,请参阅动态的正则表达式.
的评论
操作员使您可以将注释插入代码中以使其更可维护。Matlab匹配输入文本时,Matlab忽略了评论的文本。
人物 |
描述 |
例子 |
---|---|---|
(? #评论) |
在正则表达式中插入注释。当匹配输入时,注释文本被忽略。 |
|
搜索标志修改匹配表达式的行为。
旗帜 |
描述 |
---|---|
(?-一世) |
匹配信箱(默认为 |
(我)? |
不匹配字母大小写(默认为 |
(?) |
匹配点( |
(? - s) |
用非换行符的任何字符匹配模式中的点。 |
(?-m) |
匹配 |
(?) |
匹配 |
(? - x) |
包括匹配时的空格字符和注释(默认值)。 |
(?X) |
匹配时忽略空间字符和注释。用 |
标志修改的表达式可以出现在括号后面,例如
(?我)\ w *
或在括号内,用冒号与标志分开(:
), 如
(?我:\ w *)
后一种语法允许您更改较大表达式的部分行为。
正则表达式
|regexpi
|regexprep
|regexptranslate