Câu hỏi đặt ra cho perl.Làm thế nào để lấy chuỗi con của một chuỗi cho trước cho đến lần xuất hiện đầu tiên của ký tự được chỉ định?
Ví dụ: nếu tôi có "hello.world"
và ký tự được chỉ định là '.'
thì kết quả tôi muốn là "hello"
.
Câu hỏi đặt ra cho perl.Làm thế nào để lấy chuỗi con của một chuỗi cho trước cho đến lần xuất hiện đầu tiên của ký tự được chỉ định?
Ví dụ: nếu tôi có "hello.world"
và ký tự được chỉ định là '.'
thì kết quả tôi muốn là "hello"
.
Xem perldoc -f index
:
$x = "hello.world";
$y = substr($x, 0, index($x, '.'));
Sử dụng substr
:
my $string = "hello.world";
my $substring = substr($string, 0, index($string, "."));
Hoặc sử dụng regexp:
my ($substring2) = $string =~ /(.*)?\./;
use strict;
use warnings;
my $string = "hello.world";
my $dot = index($string, '.');
my $word = substr($string, 0, $dot);
print "$word\n";
mang đến cho bạn hello
cho THẾ GIỚI; my $ world = substr ($ string, $ dot, length ($ string)); – Hariboo
Một khả năng khác:
my $string = 'hello.world';
print ((split /\./, $string)[0], "\n");
Với tinh thần TIMTOWTDI, và giới thiệu tính năng mới: Sử dụng non-destructive option/r
my $partial = $string =~ s/\..*//sr;
Các tham lam .*
cuối cùng sẽ chop off tất cả mọi thứ sau khi giai đoạn đầu tiên, bao gồm các ký tự dòng mới có thể (tùy chọn /s
), nhưng giữ nguyên chuỗi ban đầu và loại bỏ sự cần thiết của các mệnh lệnh để áp đặt bối cảnh danh sách (tùy chọn /r
).
Trích từ perlop:
Nếu tùy chọn/r (không phá hủy) được sử dụng sau đó nó chạy thay vào một bản sao của chuỗi và thay vì trả lại số sự thay đổi người, nó sẽ trả bản sao có xảy ra sự thay thế hay không. Chuỗi gốc không bao giờ thay đổi khi/r là được sử dụng. Bản sao sẽ luôn là một chuỗi đơn giản, ngay cả khi đầu vào là đối tượng hoặc biến cố định.
Tôi không có nghĩa là tham chiếu perldoc dưới dạng "RTFM" nhưng dưới dạng "Để biết thêm thông tin, hãy xem: ____". :) –