web-dev-qa-db-ja.com

指定された文字が最初に現れるまで、指定された文字列の部分文字列を取得するにはどうすればよいですか?

問題はPerlです。

たとえば、"hello.world"があり、指定された文字が'.'の場合、必要な結果は"hello"になります。

9

見る - perldoc -f index

$x = "hello.world";
$y = substr($x, 0, index($x, '.'));
27
Jim Davis

substr を使用する:

my $string = "hello.world";
my $substring = substr($string, 0, index($string, "."));

またはregexpを使用する:

my ($substring2) = $string =~ /(.*)?\./;
7
yko

TIMTOWTDIの精神に基づき、新機能を導入する: 非破壊オプション _/r_を使用する

_my $partial = $string =~ s/\..*//sr;
_

貪欲な_.*_終了は、最初のピリオドの後、可能な改行文字(_/s_オプション)を含むすべてを切り落としますが、元の文字列をそのまま維持し、リストコンテキストを課すための親の必要性を排除します(_/r_オプション)。

Perlopからの引用:

/ r(非破壊)オプションを使用すると、文字列のコピーに対して置換が実行され、置換の数を返す代わりに、置換が発生したかどうかに関係なくコピーが返されます。/rを使用しても、元の文字列が変更されることはありません。入力がオブジェクトまたはタイ変数であっても、コピーは常にプレーンな文字列になります。

2
TLP
use strict;
use warnings;

my $string = "hello.world";
my $dot = index($string, '.');
my $Word = substr($string, 0, $dot);

print "$Word\n";

helloを提供します

2
canavanin

別の可能性:

my $string = 'hello.world';
print ((split /\./, $string)[0], "\n");
1
choroba