Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于符号的Perl字符串提取_Perl - Fatal编程技术网

基于符号的Perl字符串提取

基于符号的Perl字符串提取,perl,Perl,作为一名C开发人员,我对perl语言相当陌生。我的要求是我需要像这样转换值 3-6,9 TO=> "3,4,5,6,9" 如果值为 3-6,9-18 TO "3,4,5,6,9,10,11,12,13,14,15,16,17,18". 如何做到这一点?谢谢。需要拆分两次才能检测到3,9-12和3-6,9 use warnings; use strict; use feature 'say'; foreach my $string (q(3-6,9), q(3-6,9-12), q(

作为一名C开发人员,我对perl语言相当陌生。我的要求是我需要像这样转换值

3-6,9 TO=> "3,4,5,6,9"
如果值为

3-6,9-18 TO  "3,4,5,6,9,10,11,12,13,14,15,16,17,18".

如何做到这一点?谢谢。

需要拆分两次才能检测到
3,9-12
3-6,9

use warnings;
use strict;
use feature 'say';

foreach my $string (q(3-6,9), q(3-6,9-12), q(3,9-12))
{
    my @ranges = split /,/, $string;   #/

    my @result;
    for (@ranges) {
        my ($beg, $end) = split /-/;
        push @result, ($end ? $beg .. $end : $beg);
    }

    my $res = join ',', @result;

    say $res;
}
印刷品†

其中
/


†三元运算符中的
$end
测试为“真值”,而
unde
'
(空字符串)和
0
(数字零)测试均失败。在这个问题中,
$end
被假定为严格的正整数,并隐式使用。但是,
undef
是预期的,最好是具体的

push @result, (defined $end ? $beg .. $end : $beg);

请注意,Perl中的“真理”还有几个更有趣的例子。感谢您的评论。

需要拆分两次才能检测到
3,9-12
3-6,9

use warnings;
use strict;
use feature 'say';

foreach my $string (q(3-6,9), q(3-6,9-12), q(3,9-12))
{
    my @ranges = split /,/, $string;   #/

    my @result;
    for (@ranges) {
        my ($beg, $end) = split /-/;
        push @result, ($end ? $beg .. $end : $beg);
    }

    my $res = join ',', @result;

    say $res;
}
印刷品†

其中
/


†三元运算符中的
$end
测试为“真值”,而
unde
'
(空字符串)和
0
(数字零)测试均失败。在这个问题中,
$end
被假定为严格的正整数,并隐式使用。但是,
undef
是预期的,最好是具体的

push @result, (defined $end ? $beg .. $end : $beg);

请注意,Perl中的“真理”还有几个更有趣的例子。感谢您的评论。

扩展范围的一种方法:

use strict;
use warnings;

my @newvals = ();
my @retrns = qw(3-6 9 89-99);

findRanges(@retrns);

sub findRanges
{
    my @vals = @_;

    @newvals = map { if($_=~m/(\d+)\-(\d+)/) { ($1 .. $2); } else { $_; }  } @vals;
}

print join "\n", @newvals;

扩展范围的一种方法:

use strict;
use warnings;

my @newvals = ();
my @retrns = qw(3-6 9 89-99);

findRanges(@retrns);

sub findRanges
{
    my @vals = @_;

    @newvals = map { if($_=~m/(\d+)\-(\d+)/) { ($1 .. $2); } else { $_; }  } @vals;
}

print join "\n", @newvals;

您是否有任何脚本/代码行,以检查您已经证明了什么?您是否尝试了任何东西?由于机密性,我无法显示代码段。我在一家公司工作,不能共享代码。我无法使用reg_exp。最终在SQL(Oracle)中使用它。但这影响了我的周转时间。你有任何脚本/代码行来检查你已经证明了什么吗?你尝试了什么吗?由于机密性,我无法显示这段代码。我在一家公司工作,不能共享代码。我无法使用reg_exp。最终在SQL(Oracle)中使用它。但这影响了我的回程时间。我希望他们能投反对票,我希望人们能解释为什么他们没有明显的理由投反对票|谢谢@zdim工作得很有魅力。由于安全原因,我无法发布我的代码。谢谢您的帮助。@VimalBhaskar出于兴趣,我们都有安全风险,但我们可以简单地用伪代码替换代码中的敏感数据。@VimalBhaskar您有10000行带有敏感数据的代码。。??无论如何,请记住,您不必发布所有的代码,只需发布相关的代码即可作为示例。:)@VimalBhaskar这一切都很好,我只是想在未来的问题上帮助你。我希望他们能投下反对票,我希望人们能解释为什么他们没有明显的理由投下某个东西|谢谢@zdim工作得很有魅力。由于安全原因,我无法发布我的代码。谢谢您的帮助。@VimalBhaskar出于兴趣,我们都有安全风险,但我们可以简单地用伪代码替换代码中的敏感数据。@VimalBhaskar您有10000行带有敏感数据的代码。。??无论如何,请记住,您不必发布所有的代码,只需发布相关的代码即可作为示例。:)@VimalBhaskar一切都很好,我只是想帮助你解决未来的问题。