可选字符匹配正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可选字符匹配正则表达式相关的知识,希望对你有一定的参考价值。

我有一个条件,我的字符串可能看起来像:

  1. test23 @ testbee:/ var / bee /

要么

  1. 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

匹配带有可选前瞻的正则表达式

Python爬虫编程思想(31):在正则表达式中使用字符集匹配重复可选字符和特殊字符

正则表达式修饰符 - 可选标志

匹配正则表达式中的可选斜杠