令牌在正则表达式

介绍

括号中使用一个正则表达式不仅元素的表达式分组,而且指定任何匹配发现集团令牌。您可以使用令牌来匹配其他部分相同的文本。使用令牌的一个优点是,他们记得他们匹配,所以你可以回忆和重用匹配文本搜索和替换的过程中。

表达式中的每个令牌被分配一个数字,从1开始,从左到右。做参考的令牌后表达,指的是使用一个反斜杠标记数量紧随其后。例如,当引用一个令牌生成的第三组括号表达式,使用\ 3

作为一个简单的例子,如果你想寻找相同的顺序字母字符数组,你可以捕捉第一个字母作为令牌,随后立即寻找一个匹配的字符。表达式如下所示,(\ S)短语时创建一个令牌正则表达式匹配任何nonwhitespace字符的字符数组。第二部分的表达式,“\ 1”,寻找第二个实例相同的字符之后第一个:

坡= [我点了点头,几乎打盹,突然有一个攻,];(垫、托托,ext) = regexp(坡,“(\ S) \ 1”,“匹配”,“令牌”,“tokenExtents”);垫
垫=‘弟弟’“pp”“弟弟”“页”

返回的标记在细胞数组托托是:

' d ', ' p ', ' d ', ' p '

起点和终点指标为每一个令牌是:

11日11日26日26日35 35,57 57

另一个例子,捕获对匹配的HTML标记(例如,<一>< / >)和它们之间的文本。对于这个示例是使用的表达式

expr =' < (\ w +)。* ? >。* ? < / \ 1 > ';

表达式的第一部分,' < (\ w +) '匹配一个打开尖括号(<)后面跟着一个或多个字母、数字或下划线字符。打开后的圆括号捕捉标记字符尖括号。

第二部分的表达式,”。* ? >。* ?”,其余部分匹配这个HTML标记(字符的>),任何字符,可能会先于未来开放尖括号。

最后一部分,“< / \ 1 >”,匹配所有字符结束的HTML标记。这个标签是由序列组成的< / >标记,在那里标签是任何字符都被作为一个令牌。

hstr =“< !发表评论> < name = " 752507 " > < / > < b >默认< / b > < br > ';expr =' < (\ w +)。* ? >。* ? < / \ 1 > ';(垫,托托)= regexp (expr hstr,“匹配”,“令牌”);垫{:}
ans = < name = " 752507 " > < / > ans默认= < b > < / b >
托托{:}
ans = a ans = ' b '

多个令牌

这是一个令牌是如何分配值的例子。假设您要搜索以下文本:

安迪·泰德鲍勃吉姆安德鲁安迪ted马克

你选择搜索上面的文本使用以下模式:

和(y |奖赏)| (t) e (d)

这种模式有三个括号表达式生成令牌。当你最终执行搜索,以下为每个匹配生成令牌。

匹配

令牌1

令牌2

安迪

y

泰德

t

d

安德鲁

报答

安迪

y

泰德

t

d

只有使用括号的最高水平。例如,如果搜索模式和(y |报酬)发现的文本安德鲁令牌1分配值报答。然而,如果搜索模式(和(y |报酬)使用令牌1分配值安德鲁

无与伦比的令牌

对于那些没有匹配的正则表达式中指定标记的文本被评估,正则表达式regexpi返回一个空字符向量()作为标记输出,某种程度上标志着在字符串中的位置,令牌是预期。

执行示例所示正则表达式在一个特征向量指定返回的路径MATLAB®tempdir函数。正则表达式expr包括6个标记说明符,一个用于每一块的路径。第三个说明符[a - z] +没有匹配的特征向量,因为这部分的路径,配置文件以一个大写字母开始:

装备= tempdir
装备= C: \ WINNT \ Profiles \ Temp \ \ bpascal \当地人~ 1
expr = [”([a - z]:) \ \ (WINNT) \ \ [a - z] +) ?。* \ \ '”([a - z] +) \ \ [a - z] + ~ \ d) \ \(临时)\ \ '];(托托,ext) = regexp (expr空空的,“令牌”,“tokenExtents”);

当在文本中没有找到一个令牌,正则表达式返回一个空的特征向量()作为令牌和一个数字数组使用令牌。程度上的第一个数字是字符串索引,标志着令牌,是预期,第二数量的程度等于小于第一。

在这个例子中,空令牌是第三个表达式中指定的,所以第三个标记返回为空:

托托{:}
ans = ' C: ' WINNT”“bpascal”“当地人~ 1”“临时”

第三个标记返回的变量范围ext起始索引设为10,这是nonmatching术语,配置文件,开始的路径。结束索引设置为一个程度小于起始索引,或者9:

ext {:}
ans = 1 2 4 8 10 9 19 25 27 34 36 39

令牌在替换文本

当使用令牌在替换文本,参考使用1美元,2美元等,而不是\ 1,\ 2等等。这个例子捕获两个令牌和逆转他们的订单。第一,1美元,是“诺玛珍”第二,2美元,是“贝克”。请注意,regexprep返回修改后的文本,而不是一个向量的指数。

regexprep (诺玛珍贝克的,”(\ w + \ s \ w +) \年代(\ w +),2美元,1美元)
ans =贝克,诺玛·吉恩

名叫捕获

如果你使用大量的令牌在你的表情,这可能有助于分配他们的名字而不必跟踪令牌号码是分配给哪个令牌。

引用表达式中指定的令牌时,使用语法\ k <名称>而不是数字\ 1,\ 2等。

坡= [我点了点头,几乎打盹,突然有一个攻,];正则表达式(坡,(? < anychar >。) \ k < anychar > ',“匹配”)
ans =‘弟弟’“pp”“弟弟”“页”

命名的标记在标签的输出也可以有用MATLAB正则表达式的功能。尤其如此,当你处理许多的文本。

例如,解析不同地区的街道地址从几个特征向量。一个短名称分配给每个令牌表达式:

chr1 =134大街,博尔德有限公司,14923年;chr2 =的26个核桃,托皮卡,KA, 25384的;chr3 =847年工业驱动,伊丽莎白,新泽西,73548年;p1 =‘(? < adr > \ d + \ \ s + \年代(| | |街大道道路))”;p2 =‘(? <城市> [a - z] [a - z] +)”;p3 =‘(? <国家> [a - z] {2})”;p4 =‘(? < zip > \ d {5})”;expr = [p1”、“p2”、“p3”、“p4);

以下结果证明,你可以让你的输出容易使用通过使用命名标记:

loc1 = regexp (expr chr1,“名字”)
loc1 =美国存托凭证:134年主要街道的城市:“巨石”状态:“有限公司”邮政编码:“14923”
loc2 = regexp (expr chr2,“名字”)
loc2 =美国存托凭证:26核桃道路的城市:“托皮卡”状态:KA的邮政编码:“25384”
loc3 = regexp (expr chr3,“名字”)
loc3 =美国存托凭证:847年工业驱动的城市:“伊丽莎白”状态:“NJ”邮政编码:“73548”

另请参阅

||

相关的话题