这个正则表达式在做什么?

时间:2010-09-08 12:55:33

标签: regex perl

/^([a-z]:)?\//i

我不太明白这个正则表达式中?的内容,如果我必须从我理解的内容中解释它:

匹配开始“Group1是a到z和:”?之外(我不知道它做了什么)\/这使得它匹配/和选项{{1 “不区分大小写”。

我意识到,由于/i

,这将返回0或1并不安静

这是匹配目录路径还是什么?

如果我测试它:

?获得0而$var = 'test'获得1但$var ='/test';获得0

所以以$var = 'test/'开头的任何内容都会得到1,其他任何东西都是0。

有人可以用基本的术语向我解释这个正则表达式吗?

5 个答案:

答案 0 :(得分:9)

请参阅YAPE::Regex::Explain

#!/usr/bin/perl

use strict; use warnings;

use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/^([a-z]:)?\//i)->explain;
The regular expression:

(?i-msx:^([a-z]:)?/)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?i-msx:                 group, but do not capture (case-insensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (                        group and capture to \1 (optional
                           (matching the most amount possible)):
----------------------------------------------------------------------
    [a-z]                    any character of: 'a' to 'z'
----------------------------------------------------------------------
    :                        ':'
----------------------------------------------------------------------
  )?                       end of \1 (NOTE: because you're using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \1)
----------------------------------------------------------------------
  /                        '/'
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

答案 1 :(得分:8)

它匹配一个小写或大写字母([a-z]i修饰符),位于输入字符串(^)的开头,后跟一个冒号({{1所有可选的{:),后跟正斜杠?

简而言之:

\/

答案 2 :(得分:7)

?将匹配上述模式中的一个或不匹配。

?      Match 1 or 0 times

另请参阅:perldoc perlre

说明:

/.../i   # case insensitive

^(...)   # match at the beginning of the string

[a-z]:   # one character between 'a' and 'z' followed by a colon

(...)?   # zero or one time of the group, enclosed in ()

所以在英语中:匹配任何以/(斜杠)或某个字母开头,后跟冒号后跟/的内容。这看起来与unix和windows中的路径名相匹配,例如: 它会匹配:

/home/user

C:/Applications

等。

答案 3 :(得分:2)

看起来它正在寻找一条“根”路径。它将成功匹配以正斜杠(/ test)开头的任何字符串,或后跟冒号的驱动器号,后跟正斜杠(c:/ test)。

答案 4 :(得分:1)

具体来说,问号会使某些内容成为可选项。它适用于括号中的部分,后面是冒号。

会匹配的事情:

C:/
a:/
/

(上面的最后一项是为什么?)

不匹配的事情:

C:
a:
ab:/
a/