正则表达式
本主题描述正则表达式是什么以及如何使用它们来搜索文本。正则表达式是灵活且强大的,尽管他们使用复杂的语法。正则表达式是一个替代品模式
(自从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
通过一个额外的输入一个表达式,指定了一个替代模式。
步骤构建表达式
有三个步骤中使用正则表达式搜索文本为特定的术语:
这需要你想搜索文本分解成一组字符类型。这些字符类型可能是一系列的小写字母,美元符号后面跟着三个数字,然后一个小数点,等等。
使用元字符本文档中描述和运营商来表达每一段你的搜索模式作为一个正则表达式。然后结合这些表达式段划分为单一表达式使用在搜索。
本节中所示的示例搜索记录包含联系信息属于一群五个朋友。这些信息包括每个人的名字,电话号码,居住地,和电子邮件地址。我们的目标是从文本中提取特定的信息. .
联系人= {…“哈利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@ 。 |
@ 标志 |
添加ISPjan_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”}
你也可以寻找每个人的邮件地址列表中通过使用整个单元数组输入参数:
正则表达式(联系人、邮件、“匹配”);
运营商和字符
正则表达式可以包含字符、元字符运营商,标记,和标志,指定模式匹配,这些部分中描述:
元字符
元字符是字母,字母,数字和空格字符。使用它们来构建一个通用模式的字符。
元字符 |
描述 |
例子 |
---|---|---|
|
任何单个字符,包括空格 |
|
|
任何字符包含在方括号中。以下字符处理: |
|
|
任何字符不包含在方括号中。以下字符处理: |
|
|
任何字符的范围 |
|
|
任何字母、数字或下划线字符。对于英语字符集, |
|
|
任何字符,不是字母,数字或下划线。对于英语字符集, |
|
|
任何空白字符;相当于 |
|
|
任何非空白字符;相当于 |
|
|
任何数字;相当于 |
|
|
任何数字字符;相当于 |
|
|
字符的八进制值 |
|
|
字符的十六进制值 |
|
字符表示
操作符 |
描述 |
---|---|
|
报警(嘟) |
|
退格 |
|
换页 |
|
新行 |
|
回车 |
|
水平选项卡 |
|
垂直制表符 |
|
任何字符和特殊意义在你想匹配的正则表达式(例如,使用 |
量词
量词指定的次数模式必须发生在匹配的文本。
量词 |
发生的次数表达式 |
例子 |
---|---|---|
|
0或更多次连续。 |
|
|
0次或1次。 |
|
|
1次以上连续。 |
|
|
至少
|
|
|
至少
|
|
|
完全 相当于 |
|
量词可以出现在三种模式,如下表中所描述的。问代表任何量词在前面的桌子上。
模式 |
描述 |
例子 |
---|---|---|
|
贪婪的表情:匹配尽可能多的字符。 |
考虑到文本
|
|
懒惰的表达:根据需要几个字符相匹配。 |
考虑到文本
|
|
占有欲强的表达:尽可能匹配,但不要重复扫描的任何部分文本。 |
考虑到文本 |
分组操作符
分组操作符允许您捕获的令牌,一个操作符应用到多个元素,或禁用回溯在一个特定的群体。
分组操作符 |
描述 |
例子 |
---|---|---|
|
组的元素表达和获取令牌。 |
|
|
组,但不要捕捉标记。 |
没有分组, |
|
组自动。不放弃集团内部完成匹配,而不获取令牌。 |
|
|
匹配表达式 如果有一个匹配 您可以包括 |
|
锚
锚的表达式匹配一个特征向量或单词的开始或结束。
锚 |
匹配…… |
例子 |
---|---|---|
|
输入文本的开始。 |
|
|
输入文本。 |
|
|
一个单词的开始。 |
|
|
一个单词的结束。 |
|
看看断言
看看断言寻找模式,立即预定的比赛之前或之后,但不匹配的一部分。
指针仍然在当前位置,和对应的字符测试
表达式不捕获或丢弃。因此,断言可以匹配字符组重叠。
看看断言 |
描述 |
例子 |
---|---|---|
|
提前寻找相匹配的字符 |
|
|
向前看不匹配的字符 |
|
|
背后寻找相匹配的字符 |
|
|
后面找了不匹配的字符 |
|
如果你指定一个超前断言之前一个表达式,相当于一个逻辑操作和
。
操作 |
描述 |
例子 |
---|---|---|
|
匹配两个 |
|
|
匹配 |
|
有关更多信息,请参见断言在正则表达式。
逻辑和条件运算符
逻辑和条件操作符允许您测试的状态给定的条件,然后使用结果来确定哪个模式,如果有的话,来匹配。这些操作符支持逻辑金宝app或
和如果
或如果/其他
条件。(和
条件,请参阅看看断言)。
条件可以令牌,看看断言,或动态表情的形式(? @cmd)
。动态表达式必须返回一个逻辑或数值。
条件运算符 |
描述 |
例子 |
---|---|---|
|
匹配表达式 如果有一个匹配 |
|
|
如果条件 |
|
|
如果条件 |
|
令牌运营商
你标记的部分匹配文本定义通过将正则表达式的一部分包含在圆括号中。您可以参考标记的序列在文本(一个序数牌),或分配名称为更容易令牌代码维护和可读的输出。
序数牌运营商 |
描述 |
例子 |
---|---|---|
|
捕获在一个象征性的封闭表达式相匹配的字符。 |
|
|
匹配 |
|
|
如果 |
|
叫牌运营商 |
描述 |
例子 |
---|---|---|
|
捕获在一个命名的标记字符匹配的封闭表达式。 |
|
|
令牌被匹配 |
|
|
如果找到指定的令牌,然后匹配 |
|
请注意
如果一个表达式有嵌套的括号,MATLAB捕获令牌对应于最外层组括号。例如,搜索模式”(和(y |奖赏))”
,MATLAB创建一个令牌“安德鲁”
但不是“y”
或“报答”
。
有关更多信息,请参见令牌在正则表达式。
动态表情
动态表达式允许您执行一个MATLAB命令或一个正则表达式来确定匹配的文本。
附上动态表达式的括号不创建一个捕获组。
操作符 |
描述 |
例子 |
---|---|---|
|
解析 当解析, |
|
|
执行由MATLAB命令 |
|
|
执行由MATLAB命令 |
|
在动态表情,使用以下操作符定义替代条款。
替换操作符 |
描述 |
---|---|
|
输入文本的一部分,目前是匹配 |
|
输入文本的一部分,在当前匹配 |
|
输入文本的一部分,遵循当前匹配(使用 |
|
|
|
叫牌 |
|
输出返回MATLAB执行命令时, |
有关更多信息,请参见动态的正则表达式。
评论
的评论
操作符允许您插入注释你的代码,使其更易于维护。评论时忽视了MATLAB的文本匹配输入文本。
字符 |
描述 |
例子 |
---|---|---|
(? #评论) |
在正则表达式中插入注释。评论文本匹配输入时被忽略。 |
|
搜索的旗帜
搜索标记修改行为匹配表达式。
国旗 |
描述 |
---|---|
(? -我) |
匹配字母大小写(默认 |
(我)? |
字母大小写不匹配(默认 |
(?) |
匹配点( |
(? - s) |
的点模式匹配任何字符,不是一个换行符。 |
(? - m) |
匹配 |
(?) |
匹配 |
(? - x) |
包括空格字符和注释时匹配(默认)。 |
x (?) |
匹配时忽略空格字符和注释。使用 |
国旗的表达式修改后可以出现括号,如
(?我)\ w *
括号内或与一个冒号分开国旗(:
),比如
(?我:\ w *)
后者的语法允许你改变行为的一部分表达式。
另请参阅
正则表达式
|regexpi
|regexprep
|regexptranslate
|模式