在字符串中添加整数?

时间:2016-02-23 05:04:16

标签: string perl increment

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

例如

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

如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

可以使用技巧来完成。

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

但是你为什么要这么做?

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

答案 1 :(得分:1)

我认为你有一个已经包含'number'(数字串)的字符串,你想在其中增加该数字。

你必须首先以这种或那种方式提取“数字”,因为它只是在字符串里面的一串字符;然后增加它并将它全部加回来。我会认为它是由非数字

限定的一串数字
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字符串包含递增的“数字”。然而,这是非常讨厌的,我不能推荐任何一个。最后,您当然可以在$num_beg内动态找到$num_lensubstr,但这太多了,因为在一个语句中,可怜的字符串将被处理三次。 (此外,这会更改您的$str,您的问题提示不是您想要的。)

已添加 Regex提供了使用/e修饰符在替换部件中运行代码的功能。

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

请参阅此in perlrequickin perlop

答案 2 :(得分:1)

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

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

Perl manual中记录了它。