[英]perl regular expression match substring
我有幾個字符串,我想從中提取子字符串。 這是一個例子:
/skukke/integration/build/IO/something
我想提取第3個/
字符之后的所有內容。 在這種情況下,輸出應該是
/build/IO/something
我試過這樣的事
/\/\s*([^\\]*)\s*$/
比賽的結果是
something
這不是我想要的。 有人可以幫忙嗎?
你可以使用的正則表達式是:
(?:\/[^\/]+){2}(.*)
見演示
正則表達式解釋:
(?:\\/[^\\/]+){2}
- 正好匹配2次/
並且不是/
1次或更多次 (.*)
- 在之前匹配之后匹配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
。
請參閱Ideone上的演示
使用此正則表達式:
my $string = "/skukke/integration/build/IO/something";
$string =~ s/\/[a-zA-Z0-9]*\/[a-zA-Z0-9]*//;
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.