簡體   English   中英

perl正則表達式匹配子字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM