如何从此字符串中提取子字符串?

rpl*_*t23 1 perl

我有一个看起来像这样的字符串: /somedir/ref/some-dir/foo.word

我怎么能从foo上面的字符串中提取?整个字符串,包括foo可能会有所不同,但结构总是相同的.它始终是最后一个斜线和最后一个点之间的字母.

Can*_*ice 12

看起来你正在尝试从完全限定的文件路径中找到文件名(没有扩展名).如果是这种情况,那么请查看File::Basename核心模块:

my $str = "/somedir/ref/some-dir/foo.word";
my( $filename, $directory, $suffix ) = fileparse($str, qr/\.[^.]*/);
Run Code Online (Sandbox Code Playgroud)

fileparse()方法有两个参数:要解析的字符串和要删除的文件后缀.如果您事先不知道文件后缀是什么,那么您可以提供正则表达式.在这种情况下,后缀将匹配一个句点,后跟零个或多个非句点字符.

编辑:如果你没有找到文件名,并想要最后一个/和最后一个之间的字母.,试试这个:

my $str = "/somedir/ref/some-dir/foo.word";
my @elems1 = split '/', $str;
my @elems2 = split '\.', $elems1[-1];
my $foo = $elems2[-2];
Run Code Online (Sandbox Code Playgroud)

TIMTOWTDI!:-)