-3

私は今のような文字列を持っていますascv/zxc/zxc-asd/zx.java.2番目に文字列を切り取り、文字 /列値をascv/zxc.

同様に特殊文字の種類とそのレベルを入力していきます。入力に基づいて、文字列をカットする必要があります。たとえば、文字の最初の一致から-。または の 3 番目の試合/

どんな助けでも大歓迎です。

4

2 に答える 2

1

これはあなたを助けるはずです。

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
于 2013-06-13T11:52:58.160 に答える
0

どうですか:

my $str = 'ascv/zxc/zxc-asd/zx.java';
$str =~ s#^([^/]+/[^/]+).*#$1#;
say $str;

出力:

ascv/zxc
于 2013-06-13T07:25:03.583 に答える