在正则表达式模式断言

向前断言

有两种类型的环视断言的正则表达式:前瞻和回顾后。在这两种情况下,断言是必须满足以匹配返回表达的条件。

一个展望断言的形式(?=试验)并且可以在正则表达式的任何地方出现。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

也可以看看

||

相关话题