1

「ab.cde.fg.hi」のような文字列があり、2つの文字列に分割したいと思います。

  1. 「ab.cde.fg」
  2. "。こんにちは"

そうする方法は?2番目の文字列を取得するコードを記述しましたが、残りを取得するにはどうすればよいですか?

$mystring = "ab.cde.fg";
$mystring =~ m/.*(\..+)/;
print "$1\n";
4

4 に答える 4

1
my ($first, $second) = $string =~ /(.*)(\..*)/;

また、使用することができますsplit

my ($first, $second) = split /(?=\.[^.]+$)/, $string;
于 2011-04-14T18:15:27.707 に答える
1

探していませんか...

($name,$path,$suffix) = File::Basename::fileparse($fullname,@suffixlist);
于 2011-04-14T18:18:09.850 に答える
1
my @parts = /(.*)\.(.*)/s;

my @parts = split /\.(?!.*\.)/s;

my @parts = split /\.(?=[^.]*\z)/s;

更新:読み間違えました。「。」2番目の部分に含める必要がありますが、上記には含まれていません。上記は次のようになります。

my @parts = /(.*)(\..*)/s;

my @parts = split /(?=\.(?!.*\.))/s;

my @parts = split /(?=\.[^.]*\z)/s;
于 2011-04-14T18:34:33.983 に答える
0

rindexを使用して取得するという私のアイデアを宣伝するには

   1) "ab.cde.fg" 
   2) ".hi"

から"ab.cde.fg.hi"、実験を簡単にするためにこのスクリプトを作成しました。

  use strict;
  use diagnostics;
  use warnings;
  use English;

  my @tests = (
      [ 'ab.cde.fg.hi', 'ab.cde.fg|.hi' ]
    , [ 'abxcdexfg.hi', 'abxcdexfg|.hi' ]
  );
  for my $test (@tests) {
    my $src = $test->[0];
    my $exp = $test->[1];
    printf "-----|%s| ==> |%s|-----\n", $src, $exp;
    for my $op (
        [ 'ikegami 1' , sub { shift =~ /(.*)\.(.*)/s; } ]
      , [ 'ikegami 2' , sub { split( /\.(?!.*\.\z)/s, shift) } ]
      , [ 'rindex'    , sub { my $p = rindex( $_[0], '.' );
                              (   substr($_[0], 0, $p)
                                , substr($_[0], $p)
                              ); }
        ]
    ) {
      my ($head, $tail) = $op->[1]( $src );
      my $res = join '|', ($head, $tail);
      my $ok  = $exp eq $res ? 'ok' : "fail: $exp expected.";
      printf "%12s: %-20s => %-20s : %s\n", $op->[0], $src, $res, $ok;
    }
  }

出力:

-----|ab.cde.fg.hi| ==> |ab.cde.fg|.hi|-----
   ikegami 1: ab.cde.fg.hi         => ab.cde.fg|hi         : fail: ab.cde.fg|.hi expected.
   ikegami 2: ab.cde.fg.hi         => ab|cde               : fail: ab.cde.fg|.hi expected.
      rindex: ab.cde.fg.hi         => ab.cde.fg|.hi        : ok
-----|abxcdexfg.hi| ==> |abxcdexfg|.hi|-----
   ikegami 1: abxcdexfg.hi         => abxcdexfg|hi         : fail: abxcdexfg|.hi expected.
   ikegami 2: abxcdexfg.hi         => abxcdexfg|hi         : fail: abxcdexfg|.hi expected.
      rindex: abxcdexfg.hi         => abxcdexfg|.hi        : ok
于 2011-04-14T19:51:58.240 に答える