/^([a-z]:)?\//i
我不太明白这个正则表达式中?
的内容,如果我必须从我理解的内容中解释它:
匹配开始“Group1是a到z和:”?
之外(我不知道它做了什么)\/
这使得它匹配/
和选项{{1 “不区分大小写”。
我意识到,由于/i
这是匹配目录路径还是什么?
如果我测试它:
?
获得0而$var = 'test'
获得1但$var ='/test';
获得0
所以以$var = 'test/'
开头的任何内容都会得到1,其他任何东西都是0。
有人可以用基本的术语向我解释这个正则表达式吗?
答案 0 :(得分:9)
#!/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/