我有几个字符串,我想从中提取子字符串。这是一个例子:
@Html.PasswordFor(model => model.Password, new { @placeholder = "请输入密码", @class = "ipt ipt-login ipt-passwordforJS", @required = "required" })
我想在第3个/skukke/integration/build/IO/something
字符后提取所有内容。在这种情况下,输出应为
/
我试过这样的事情
/build/IO/something
比赛结果是
/\/\s*([^\\]*)\s*$/
这不是我想要的。有人可以帮忙吗?
答案 0 :(得分:2)
您可以使用的正则表达式是:
(?:\/[^\/]+){2}(.*)
请参阅demo
正则表达式解释:
(?:\/[^\/]+){2}
- 正好匹配2次/
以及非/
次的所有内容(.*)
- 在我们之前匹配之后匹配0个或更多字符并放入捕获组1。以下是TutorialsPoint的演示:
$str = "/skukke/integration/build/IO/something";
print $str =~ /(?:\/[^\/]+){2}(.*)/;
输出:
/build/IO/something
您可以使用File::Spec::Functions
:
#!/usr/bin/perl
use File::Spec;
$parentPath = "/skukke/integration";
$filePath = "/skukke/integration/build/IO/something";
my $relativePath = File::Spec->abs2rel ($filePath, $parentPath);
print "/". $relativePath;
输出/build/IO/something
。
答案 1 :(得分:0)
使用此正则表达式:
my $string = "/skukke/integration/build/IO/something";
$string =~ s/\/[a-zA-Z0-9]*\/[a-zA-Z0-9]*//;
希望这有帮助。