我有一个条件,我的字符串可能看起来像:
要么
我需要在这里提取三个字符串:test23(如果可用),testbee和test.html
那么,在Perl,
($user, $sys, $file) = ($source =~ /(\S*?)\@?(\S+?):?[^:]*?([^\/]+)$/);
for 1. give,$ user =,$ sys = test @ testbee,$ file = test.html for 2. this give,$ user =,$ sys = test,$ file = test.html
有没有办法,我可以使用一个表达式来获取用户'test'(如果它存在),如果没有则没有。
更易维护的解决方案:
use URI qw();
for my $str (qw(
test23@testbee:/var/bee/
testbee:/var/bee/test.html
)) {
my $u = URI->new("ssh://$str");
printf "user: %s host: %s path: %s\n",
$u->user, $u->host, $u->path;
}
这里总是将可选部分与组1匹配,有时$1
或$3
将为空:
(?:(\w+)@)?(\w+):(?:\/\w+){2}\/((?:\w|\.)*)
但是:ぁzxswい
如果您想跳过更多子目录,请用regex101替换{2}
。