【发布时间】:2012-01-05 13:59:16
【问题描述】:
问题是针对 perl 的。
例如,如果我有"hello.world",并且指定的字符是'.',那么我想要的结果是"hello"。
【问题讨论】:
问题是针对 perl 的。
例如,如果我有"hello.world",并且指定的字符是'.',那么我想要的结果是"hello"。
【问题讨论】:
$x = "hello.world";
$y = substr($x, 0, index($x, '.'));
【讨论】:
使用substr:
my $string = "hello.world";
my $substring = substr($string, 0, index($string, "."));
或者使用正则表达式:
my ($substring2) = $string =~ /(.*)?\./;
【讨论】:
.,正则表达式将给出字符串直到 last 句点。注意区别。对非贪婪的正则表达式使用.*? 以获得相同的功能。
use strict;
use warnings;
my $string = "hello.world";
my $dot = index($string, '.');
my $word = substr($string, 0, $dot);
print "$word\n";
给你hello
【讨论】:
本着 TIMTOWTDI 的精神,并引入新功能:使用 non-destructive option /r
my $partial = $string =~ s/\..*//sr;
贪婪的.* end 将在第一个句点之后切断所有内容,包括可能的换行符(/s 选项),但保持原始字符串完整并消除使用括号强加列表上下文的需要(/r 选项)。
引用 perlop:
如果使用 /r(非破坏性)选项,则运行 替换字符串的副本,而不是返回 替换的数量,它返回副本,无论是否 发生了替代。当 /r 时,原始字符串永远不会改变 用过的。副本将始终是纯字符串,即使输入是 对象或绑定变量。
【讨论】:
另一种可能性:
my $string = 'hello.world';
print ((split /\./, $string)[0], "\n");
【讨论】: