perl模式匹配字符串的非贪婪匹配

时间:2013-06-13 06:35:40

标签: string perl design-patterns matching greedy

我有一个类似ascv/zxc/zxc-asd/zx.java的字符串,现在我希望在第二个/剪切字符串,并将字符串值设为ascv/zxc

同样,我将输入特殊字符类型及其级别。根据输入,它应该切断字符串。例如。从第一场比赛角色-;或/

的第三场比赛

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

怎么样:

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

<强>输出:

ascv/zxc