可选字符匹配正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可选字符匹配正则表达式相关的知识,希望对你有一定的参考价值。
我有一个条件,我的字符串可能看起来像:
- test23 @ testbee:/ var / bee /
要么
- testbee:/var/bee/test.html
我需要在这里提取三个字符串: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
",
$u->user, $u->host, $u->path;
}
另一答案
这里总是将可选部分与组1匹配,有时$1
或$3
将为空:
(?:(w+)@)?(w+):(?:/w+){2}/((?:w|.)*)
但是:ぁzxswい
如果您想跳过更多子目录,请用regex101替换{2}
。
以上是关于可选字符匹配正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式模块re:正则表达式常用字符常用可选标志位group与groupsmatchsearchsubfindallcompile