如何截取给定字符串中指定字符第一次出现之前的子字符串?

11

这个问题与perl相关。

例如,如果我有字符串"hello.world",指定字符为'.',那么我想要的结果是"hello"

5个回答

28

请参考perldoc -f index

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

3
我并不是将 perldoc 参考文档当作 "RTFM"(看文档吧)的意思,而是作为 "欲了解更多信息,请参考:____" 的一种方式。 :) - Jim Davis

7

使用substr函数:

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

或使用正则表达式:
my ($substring2) = $string =~ /(.*)?\./;

1
substr将提供字符串直到第一个句点“.”,而正则表达式将提供字符串直到最后一个句点。请注意区别。使用.*?进行非贪婪正则表达式以获得相同的功能。 - TLP

2

在TIMTOWTDI的精神下,引入了新功能:使用非破坏性选项/r

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

贪婪的.*模式将截断第一个句点之后的所有内容,包括可能存在的换行符(/s选项),但保留原始字符串并消除了强制列表上下文所需的括号(/r选项)。
引用自perlop:

如果使用/r(非破坏性)选项,则在字符串的副本上运行替换,并返回副本而不管是否发生替换。当使用/r时,原始字符串永远不会被更改。即使输入是对象或绑定变量,副本也始终是纯字符串。


2
use strict;
use warnings;

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

print "$word\n";

提供给你hello


对于 WORLD;我的 $world = substr($string, $dot, length($string)); - PodTech.io

1

另一种可能性:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接