【问题标题】:How to take substring of a given string until the first appearance of specified character?如何获取给定字符串的子字符串,直到第一次出现指定字符?
【发布时间】:2012-01-05 13:59:16
【问题描述】:

问题是针对 perl 的。

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

【问题讨论】:

    标签: string perl substring


    【解决方案1】:

    perldoc -f index:

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

    【讨论】:

    • 我并不是说 perldoc 引用是“RTFM”,而是“有关更多信息,请参阅:____”。 :)
    【解决方案2】:

    使用substr

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

    或者使用正则表达式:

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

    【讨论】:

    • substr 将给出字符串直到 first 句点.,正则表达式将给出字符串直到 last 句点。注意区别。对非贪婪的正则表达式使用.*? 以获得相同的功能。
    【解决方案3】:
    use strict;
    use warnings;
    
    my $string = "hello.world";
    my $dot = index($string, '.');
    my $word = substr($string, 0, $dot);
    
    print "$word\n";
    

    给你hello

    【讨论】:

    • 为世界;我的 $world= substr($string ,$dot,length($string ));
    【解决方案4】:

    本着 TIMTOWTDI 的精神,并引入新功能:使用 non-destructive option /r

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

    贪婪的.* end 将在第一个句点之后切断所有内容,包括可能的换行符(/s 选项),但保持原始字符串完整并消除使用括号强加列表上下文的需要(/r 选项)。

    引用 perlop:

    如果使用 /r(非破坏性)选项,则运行 替换字符串的副本,而不是返回 替换的数量,它返回副本,无论是否 发生了替代。当 /r 时,原始字符串永远不会改变 用过的。副本将始终是纯字符串,即使输入是 对象或绑定变量。

    【讨论】:

      【解决方案5】:

      另一种可能性:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        • 2013-10-04
        • 1970-01-01
        • 2020-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多