这个正则表达式意味着什么?

时间:2011-08-25 08:18:01

标签: regex

/\ATo\:\s+(.*)/

另外,你是如何解决的,方法是什么?

6 个答案:

答案 0 :(得分:4)

在多行正则表达式中,\A匹配字符串的开头(\Z是字符串的结尾,而^ / $匹配开头/结尾字符串或行的开头/结尾)。在单行变体中,您只需使用^$作为字符串/行的开头和结尾,因为没有区别。

To是字面意思,\:是转义:

\s表示空格,+表示一个或多个前面的“字符”(本例中为空格)。

()是一个捕获组,这意味着此处的所有内容都将存储在您可以使用的“注册表”中。因此,这是将被提取的肉。

.*仅表示任何非换行符.,为*的零次或多次。

所以,这个正则表达式会做的是处理一个字符串,如:

To: paxdiablo
Re: you are so cool!

并返回文字paxdiablo

至于如何自己学习如何解决这个问题,Perl regex tutorial (a)是一个好的开始,然后练习,练习,练习: - )


(a)您实际上没有说过您正在使用哪种正则表达式实现,但大多数现代实现与Perl非常相似。如果您能找到适合您特定风味的特定教程,那显然会更好。

答案 1 :(得分:2)

\A是零宽度断言,表示“仅在字符串的开头匹配”。

正则表达式读取:在以“收件人:”开头,后跟一个或多个空格(\s)的行上,捕获该行的其余部分((.*))。

答案 2 :(得分:1)

首先,您需要知道不同的字符类和量词是什么。例如,字符类是来自正则表达式的反斜杠前缀字符\A。量词是例如+。互联网上有几个参考文献,例如this one

使用它,我们可以看到从左到右发生的事情:

  • \A匹配字符串的开头。
  • To匹配文字“To”字面意思
  • \:逃脱了“:”,所以它失去了它的特殊含义并变成“只是一个冒号”
  • \s匹配空格(空格,制表符等)
  • +表示与之前的课程匹配一次或多次,因此\s+表示一个或多个空格
  • ()是一个捕获组,在parens中匹配的任何内容都会保存以供以后使用
  • .表示“任何角色”
  • *+类似,但为零次或多次,因此.*表示任意数量的任意字符

将它们放在一起,正则表达式将匹配以“To:”开头的字符串,然后是至少一个空格,以及它将保存的任何内容。因此,使用字符串“To:JaneKealum”,您将能够提取“JaneKealum”。

答案 3 :(得分:0)

它在输入的开头匹配To:,后跟至少一个空格,后跟任意数量的字符作为一个组。

答案 4 :(得分:0)

从左开始查找任何转义(即\A)个字符。其余的都是普通人物。 \A表示输入的开始。所以To:必须在输入的最开头匹配。我认为:一无所获。 \s是所有空格(制表符,空格,可能是换行符)的字符组,其后面的+表示您必须有一个或多个空格字符。之后,您将捕获组中的所有其余行(标有( ))。

如果输入是

To:   progo@home

捕获组将包含"progo@home"

答案 5 :(得分:0)

初始和尾随/个字符分隔正则表达式。

表达式中的\表示特别处理后面的字符,或者如果它通常具有特殊含义则将其视为文字。

\A表示仅匹配字符串的开头。

To表示匹配文字“To”

\:表示匹配文字':'。冒号通常是字面意思,没有特殊意义。

\s表示匹配空格字符。

+表示尽可能多地匹配,但至少跟随其中的一个匹配,因此\s+表示匹配一个或多个空格字符。

()定义一组将由表达式评估程序捕获并返回的字符。

最后.匹配任何字符,*表示匹配尽可能多,但可以为零。因此,(.*)将捕获所有字符到输入字符串的末尾。

因此,模式将匹配一个以“To:”开头的字符串,并捕获在第一个后续非空白字符后出现的所有字符。

真正理解这些事情的唯一方法是一次一个地检查它们并检查每个组件的含义。