Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex perl正则表达式匹配子字符串_Regex_Perl - Fatal编程技术网

Regex perl正则表达式匹配子字符串

Regex perl正则表达式匹配子字符串,regex,perl,Regex,Perl,我有几个字符串,我想从中提取一个子字符串。以下是一个例子: /skukke/integration/build/IO/something 我想提取第3个/字符之后的所有内容。在这种情况下,输出应该是 /build/IO/something 我试过这样的东西 /\/\s*([^\\]*)\s*$/ 比赛的结果是 something 这不是我想要的。有人能帮忙吗 正则表达式解 您可以使用的正则表达式是: (?:\/[^\/]+){2}(.*) 看 正则表达式解释: (?:\/[^\/]+

我有几个字符串,我想从中提取一个子字符串。以下是一个例子:

/skukke/integration/build/IO/something
我想提取第3个
/
字符之后的所有内容。在这种情况下,输出应该是

/build/IO/something
我试过这样的东西

/\/\s*([^\\]*)\s*$/
比赛的结果是

something
这不是我想要的。有人能帮忙吗

正则表达式解 您可以使用的正则表达式是:

(?:\/[^\/]+){2}(.*)

正则表达式解释:

  • (?:\/[^\/]+){2}
    -精确匹配2次
    /
    ,所有非
    /
    的匹配1次或更多次
  • (.*)
    -在我们之前匹配的内容之后匹配0个或多个字符,并将其放入捕获组1
下面是一个演示:

输出:

/build/IO/something
非正则解 您可以使用:

输出
/build/IO/something


请参见使用此正则表达式:

my $string = "/skukke/integration/build/IO/something";
$string =~ s/\/[a-zA-Z0-9]*\/[a-zA-Z0-9]*//;

希望这有帮助。

听起来您真正想做的是创建与
/skukke/integration
相关的文件路径。应避免模式匹配,并使用模块和
abs2rel
功能。但在任何人都能写一篇文章之前,你需要更好地解释你需要什么solution@Downvoter:这是给你的。否决工作解决方案不好。很乐意帮助。请考虑接受答案。对不起,请问,目的是什么??:在正则表达式的开头?<代码>(……)<代码>是为了使匹配更少的资源消耗。无论如何,我们没有使用这个值。如果需要,请在整个开头部分加上圆括号(a):
((?:\/[^\/]+){2})(.*)
#!/usr/bin/perl
use File::Spec;
$parentPath = "/skukke/integration";
$filePath = "/skukke/integration/build/IO/something";
my $relativePath = File::Spec->abs2rel ($filePath,  $parentPath);
print "/". $relativePath;
my $string = "/skukke/integration/build/IO/something";
$string =~ s/\/[a-zA-Z0-9]*\/[a-zA-Z0-9]*//;