有两种类型的环视断言的正则表达式:前瞻和回顾后。在这两种情况下,断言是必须满足以匹配返回表达的条件。
一个展望断言的形式(?=试验)
并且可以在正则表达式的任何地方出现。MATLAB®展望当前位置的文本的测试条件。如果MATLAB相匹配的测试条件下,继续处理表达式的其余部分找到匹配。
例如,向前看的特征向量指定路径找到包含程序文件的文件夹的名称(在这种情况下,fileread.m
)。
CHR =其中('FILEREAD')
CHR ='matlabroot\工具箱\ MATLAB \ iofun \ fileread.m”
正则表达式(CHR,'\ W +(?= \\\ W + \。[MP])','比赛')
ANS = 1×1单元阵列{ 'iofun'}
的匹配表达式,\ w +
对于一个或多个字母数字或下划线字符搜索。每一次正则表达式
找到一个符合这个条件来看,展望反斜杠(以两个反斜杠规定,\\
),接着是文件名(\ w +
) 带着.M
要么.P
延期 (\。[MP]
)。该正则表达式
函数返回匹配满足先行条件,这是文件夹名称iofun
。
向前断言不消耗文本中的任何字符。其结果是,你可以用它们来寻找重复的字符序列。
例如,使用预读找一切的一个字符向量6个非空白字符序列通过匹配它之前五个额外字符初始字符:
CHR =“找到几个6-炭。短语;的startIndex = regexpi(CHR,'\ S(?= \ S {5})')
的startIndex = 1 8 9 16 17 24 25
起始索引对应这些短语:
找到Severa的everal 6炭-char。短语hrases
如果不先行操作,MATLAB解析从左至右,消耗载体,因为它去一个特征向量。如果找到匹配的字符,正则表达式
记录的位置,并继续从最近匹配的位置解析特征向量。还有在这个过程中没有任何的字符重叠。
CHR =“找到几个6-炭。短语;的startIndex = regexpi(CHR,'\ S {6}')
的startIndex = 1 8 16 24
起始索引对应这些短语:
找到Severa的6个字符的短语
使用先行操作的另一个方法是进行逻辑和
两种情况之间。本实施例中最初尝试定位在由帮助的前50个字符的字符阵列中的所有小写辅音normest
功能:
帮助文件=帮助('normest');CHR =帮助文件(1:50)
CHR ='NORMEST估计矩阵2-范数。NORMEST(S”
仅仅寻找非元音([^ AEIOU]
)不返回预期的答案,作为输出包括大写字母,空格字符和标点:
C =正则表达式(CHR,'[^ AEIOU]','比赛')
C = 1×43单元阵列的列1至14 { '} {'N '} {' O '} {' R '} {' M '} {' E '} {' S '} {' T'}{ '} {'E '} {' S '} {' T '} {' M '} {' T'}列15至28 { '} {' T '} {' H '} {''} { 'M'} { 'T'} { 'R'} { 'X'} { '} {“2 '} {' - '} {' N '} {' R '} {' M'}列29至42 { ' '} {' ↵'} {'} {'} {'} { '} {' N '} {' O '} {' R '} {' M'}{ 'E'} { 'S'} { 'T'} { '('}柱43 { 'S'}
再试试这个,用超前运营商创建以下和
健康)状况:
(小写字母)和(非元音)
这一次,结果是正确的:
C =正则表达式(CHR,'(?= [A-Z])[^ AEIOU]','比赛')
C = 1×13单元阵列{的'} { 'T'} { 'M'} { 'T'} { 'T'} { 'H'} { 'M'} { 'T'} {'R'} {' X '} {' N '} {' R '} {' M'}
请注意,使用先行运营商何时执行和
,你需要把比赛表达EXPR
后测试表达式测试
:
(?=测试)EXPR或(?!测试)EXPR