文档

正则表达式中的超前断言

断言

正则表达式有两种类型的四处查找断言:前向查找和后向查找。在这两种情况下,断言都是返回与表达式匹配的必须满足的条件。

一个超前断言的形式是(? =测试)并且可以出现在正则表达式中的任何位置。MATLAB®在文本中当前位置的前面查找测试条件。如果MATLAB匹配测试条件,它将继续处理表达式的其余部分以找到匹配。

例如,在指定路径的字符向量中向前查找包含程序文件的文件夹的名称(在本例中,fileread.m).

CHR = which(“fileread”
空空的=matlabrootmatlab工具箱\ \ \ iofun \ fileread.m
正则表达式(空空的,' \ w + (? = \ \ \ w + \ (mp))”“匹配”
Ans = 'iofun'

匹配表达式,\ w +,搜索一个或多个字母数字或下划线字符。每一次正则表达式找到一个与此条件匹配的项,它会查找一个反斜杠(由两个反斜杠指定,\ \),后面跟着一个文件名(\ w +)与00每分钟扩展(\ [mp]。).的正则表达式函数返回满足超前条件(即文件夹名称)的匹配项iofun

重叠的匹配

超前断言不消耗文本中的任何字符。因此,您可以使用它们来查找重叠的字符序列。

例如,使用超前查找每一个字符向量中六个非空白字符的序列,通过匹配五个额外字符前面的初始字符:

空空的=找到几个6字符。短语“;startIndex = regexpi(chr,(? = \ \年代{5})”
startIndex = 1 8 9 16 17 24 25 .使用实例

起始索引对应于以下短语:

找到每一个6-char。短语hrases

如果没有前瞻操作符,MATLAB将从左到右解析字符向量,并在向量移动时使用该向量。如果找到匹配的字符,正则表达式记录位置并从最近匹配的位置继续解析字符向量。在这个过程中没有人物的重叠。

空空的=找到几个6字符。短语“;startIndex = regexpi(chr,\年代{6}
startIndex = 1 8 16 24

起始索引对应于以下短语:

找到每一个6字符短语

逻辑与条件

使用超前操作的另一种方法是执行逻辑操作在两个条件之间。属性的帮助的前50个字符组成的字符数组中定位所有小写辅音规范功能:

Helptext = help(“规范”);CHR = helptext(1:50)
估计矩阵2-范数。规范的

只搜寻非元音字母([^五个母音字母))不会返回预期的答案,因为输出包括大写字母、空格字符和标点符号:

C = regexp(chr,“[^五个母音字母]“匹配”
c =列1到14 ' ' ' N ' ' O ' ' R ' ' M ' ' E ' S ' T ' ' ' ' E ' S ' T ' ' M ' T '……

再次尝试,使用前瞻操作符创建以下内容条件:

(小写字母)AND(不是元音)

这一次,结果是正确的:

C = regexp(chr,(? = [a - z])[^五个母音字母)”“匹配”
c = ' s ' ' t ' ' m ' ' t ' ' t ' ' h ' ' m ' t ' ' r ' ' x ' ' n ' ' r ' ' m '

注意,在使用前视操作符执行,则需要放置匹配表达式expr测试表达式测验

(?=test)expr或(?!test)expr

另请参阅

||

相关的话题

这个话题有用吗?