私は今のような文字列を持っていますascv/zxc/zxc-asd/zx.java
.2番目に文字列を切り取り、文字 /
列値をascv/zxc
.
同様に特殊文字の種類とそのレベルを入力していきます。入力に基づいて、文字列をカットする必要があります。たとえば、文字の最初の一致から-
。または の 3 番目の試合/
どんな助けでも大歓迎です。
私は今のような文字列を持っていますascv/zxc/zxc-asd/zx.java
.2番目に文字列を切り取り、文字 /
列値をascv/zxc
.
同様に特殊文字の種類とそのレベルを入力していきます。入力に基づいて、文字列をカットする必要があります。たとえば、文字の最初の一致から-
。または の 3 番目の試合/
どんな助けでも大歓迎です。
これはあなたを助けるはずです。
use strict;
use warnings;
use 5.010;
my $str = 'ascv/zxc/zxc-asd/zx.java';
say truncate_at($str, '/', 1);
say truncate_at($str, '/', 2);
say truncate_at($str, '/', 3);
say truncate_at($str, '/', 4);
say truncate_at($str, '-', 1);
sub truncate_at {
my ($str, $sep, $n) = @_;
my @offsets;
push @offsets, $-[0] while $str =~ m|\Q$sep|g;
substr($str, $offsets[$n-1]) = '' if $n <= @offsets;
$str;
}
出力
ascv
ascv/zxc
ascv/zxc/zxc-asd
ascv/zxc/zxc-asd/zx.java
ascv/zxc/zxc
どうですか:
my $str = 'ascv/zxc/zxc-asd/zx.java';
$str =~ s#^([^/]+/[^/]+).*#$1#;
say $str;
出力:
ascv/zxc