【问题标题】:Add to integer within string?添加到字符串中的整数?
【发布时间】:2016-02-23 05:04:15
【问题描述】:

我想通过在字符串中增加一个变量来创建一个字符串。

例如。

$result = "Result: $amount++";

如何做到这一点?

【问题讨论】:

  • $amount++; $result = "Result: $amount";?
  • @TLP 我认为他希望它内联,在同一个表达式中。话虽如此,我认为您的解决方案没有任何问题(我实际上更喜欢它)。
  • @TimBiegeleisen 那是同一个表达式。只用分号隔开。这些差异纯粹是哲学上的。
  • 这是一个奇怪的要求。你希望通过这样做来完成什么?
  • @ceving、++$amount$amount++ 返回不同的值。

标签: string perl increment


【解决方案1】:

这可以通过诡计来完成。

$result = "Result: ${\( $amount++ )}";

但是你为什么想要???

$result = "Result: ".$amount++;

【讨论】:

【解决方案2】:

如果要修改字符串中的数字,则必须使用e 修饰符进行s 操作。这使得 Perl 将替换作为表达式进行评估。

#! /usr/bin/perl
$_ = "Result: 1\n";
s/\d+/$&+1/e;
print;

它记录在 Perl manual

【讨论】:

    【解决方案3】:

    我认为您的字符串已经包含一个“数字”(数字字符串),并且您希望在其中增加该数字。

    您必须首先以某种方式提取“数字”,因为在字符串中它只是一个字符字符串;然后增加它并加入它。我会认为它是由非数字限制的一串数字

    my ($pre, $num, $post) = $str =~ m/(\D*)(\d+)(\D*)/;
    $str = $pre . ($num+1) . $post;
    

    这是一个关键的假设,即单词只在一个地方包含一串数字,而在其他地方没有数字,因为如果不是这种情况,问题就会不成立。

    只是出于好奇,我想补充一点。 substr 可以访问字符串的一部分,并且该函数可以作为lvalue 进行操作(可以分配给)。因此,如果您要知道“数字”的起始位置和长度(可以通过各种方式找到),您可以将上述过程塞进一个语句中,如果必须的话

    substr($str, $num_beg, $num_len) = substr($str, $num_beg, $num_len) + 1;
    

    或者,同样糟糕

    substr($str, $num_beg, $num_len) = ($str =~ m/(\d+)/)[0] + 1;
    

    现在,您的起始 $str 字符串中包含递增的“数字”。但是,这很讨厌,我不能推荐任何一个。最后,您当然可以在substr 内部即时找到$num_beg$num_len,但这太多了,因为在一个语句中会处理3 次糟糕的字符串。 (此外,这会更改您的$str,您的问题暗示这不是您想要的。)


    添加 正则表达式通过使用/e 修饰符提供了在替换部分中运行代码的功能。

    my $str = "ah20bah";
    $str =~ s/(\d+)/$1+1/e;
    say $str;  # it's 'ah21bah'
    

    请参阅in perlrequickin perlop

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2015-11-21
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      相关资源
      最近更新 更多