2011-11-24 8 views

Odpowiedz

22

Zobacz perldoc -f index:

$x = "hello.world"; 
$y = substr($x, 0, index($x, '.')); 
+3

Nie miałem na myśli perldoc jako "RTFM", ale jako "Więcej informacji, patrz: ____". :) –

5

Korzystanie substr:

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

lub za pomocą regexp:

my ($substring2) = $string =~ /(.*)?\./; 
+1

's/substring/substr/g' –

+0

@JimDavis thanks – yko

+1

Substrat poda łańcuch aż do * pierwszego * okresu' .', regex poda łańcuch aż do * ostatniego * okresu. Zauważ różnicę. Użyj '. *?' Dla nieagresywnego wyrażenia regularnego, aby uzyskać tę samą funkcjonalność. – TLP

1
use strict; 
use warnings; 

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

print "$word\n"; 

daje hello

+0

dla WORLD; my $ world = substr ($ string, $ dot, length ($ string)); – Hariboo

1

Inna możliwość:

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

W duchu TIMTOWTDI i wprowadzając nowe funkcje: Używanie non-destructive option/r

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

chciwy .* koniec będzie odrąbać wszystko po pierwszym okresie, w tym możliwe znaki nowego wiersza (opcja /s), ale zachowaj oryginalny ciąg znaków w stanie nienaruszonym i usuń konieczność wstawiania w celu narzucenia kontekstu listy (opcja /r).

żądanie z perlop:

Jeśli opcja/R (nieinwazyjne) służy wówczas uruchamia podstawienie na kopię łańcucha i zamiast zawracania liczbę podstawień, zwraca kopię, niezależnie od tego, czy nastąpiło podstawienie, czy też nie. Oryginalny ciąg nigdy nie jest zmieniany, gdy używana jest/r jest . Kopia zawsze będzie zwykłym ciągiem znaków, nawet jeśli dane wejściowe to obiekt lub zmienna powiązana.

Powiązane problemy