小编Sin*_*nür的帖子

如何使用Perl将多个正则表达式匹配连接到一个数组元素?

以下是匹配正则表达式并在数组中存储值的脚本:

    sub b1 {
    #   print $_;
        my @file = @_;
        my @value;
        my $find = qr/(\s+)([0-9]+)\s([A-Z])\s[0-1].[0-9]+\s->\s([A-Z])\s/;
        foreach my $file(@file){
            push (@value, $file=~ /$find/) ;
            print "\n";
        }
        return @value;
    }

    my @array_b1 = b1(@body);
    print "@array_b1 \n";

__DATA__

      28 C 0.510 -> L 0.923
      30 S 0.638 -> A 0.527
      31 A 0.496 -> P 0.952

__OUTPUT__

28 C L            30 S A            31 A P  
Run Code Online (Sandbox Code Playgroud)

在从正则表达式捕获值并将其存储为数组时,脚本将值存储在数组中的连续元素中,即上面的数组包含元素:

@array[1]=28
@array[2]=C
@array[3]=L
@array[4]=30. 
Run Code Online (Sandbox Code Playgroud)

相反,我想将正则表达式捕获的值存储在同一个数组元素中.那是:

@array[1]=28CL
@array[2]=30SA
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

regex arrays perl join

1
推荐指数
1
解决办法
1382
查看次数

如何在Perl的XML :: Simple中禁用子标签排序?

我只想找到在XML :: Simple中禁用排序操作的方法

例如:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my %my_xml = (
    NAME  => [ 'test' ],
    EMAIL => [ 'test@example.com' ],
    ID    => 12,
);

my $xs = XML::Simple->new;
print $xs->XMLout(\%my_xml, RootName => "datas", NoSort => 1);

__END__
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

<datas ID="12">
  <EMAIL>test@example.com</EMAIL>
  <NAME>test</NAME>
</datas>
Run Code Online (Sandbox Code Playgroud)

但我希望输出为:

<datas ID="12">
  <NAME>test</NAME>
  <EMAIL>test@example.com</EMAIL>
</datas>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

xml perl xml-simple

1
推荐指数
1
解决办法
2344
查看次数

使用 Perl 从文件中读取部分

我正在尝试从 Perl 中的输入文件读取值。输入文件如下所示:

1-sampledata1 This is a sample test
              and data for this continues
2-sampledata2 This is sample test 2
              Data for this also is on second line
Run Code Online (Sandbox Code Playgroud)

我想读取上面的数据,以便数据进入1-sampledata1@array1数据2-sampledata2进入@array2等等。我将有大约 50 个这样的部分。喜欢50-sampledata50

编辑:名称不会总是 X-sampledataX。例如,我刚刚这样做了。所以名称不能循环。我想我必须手动输入它们

到目前为止,我有以下内容(有效)。但我正在寻找一种更有效的方法来做到这一点..

foreach my $line(@body){
        if ($line=~ /^1-sampledata1\s/){
                $line=~ s/1-ENST0000//g;
                $line=~ s/\s+//g;
                push (@array1, $line);
          #using splitarray because i want to store data as one character each
          #for ex: i wana store 'This' as T H I …
Run Code Online (Sandbox Code Playgroud)

arrays perl readline

1
推荐指数
1
解决办法
3284
查看次数

如何验证用户名是否以字母开头并且仅包含字母数字字符?

我正在使用Jquery验证.

目前,我有一个用户名,我要为此用户名验证的是:

  • 不是空白
  • 可用性
  • 没有空格,我添加这个方法:

    $.validator.addMethod("nowhitespace", function(value, element) {
         return this.optional(element) || /^\S+$/i.test(value);
    }, "  No white space please");
    
    Run Code Online (Sandbox Code Playgroud)
  • 字母数字

    $.validator.addMethod("alphanumeric", function(value, element) {
         return this.optional(element) || /^[a-zA-Z0-9]+$/i.test(value);
    }, "  Alphanumeric. Only numbers and alphabet allowed");
    
    Run Code Online (Sandbox Code Playgroud)
  • 第一个字符必须是字母,不能是数字.

我被困在最后的验证中.如何编写正则表达式来验证第一个字符必须是字母?

BTW:

没有空白似乎有问题.我试过我的脚本,1允许空格,但不允许2个空格,为什么?

javascript regex jquery-validate

1
推荐指数
1
解决办法
2万
查看次数

当XMLin呱呱叫时,如何阻止我的应用程序被终止?

在我的应用程序中,我使用XML :: Simple并使用导出的XMLin()来解析XML文件.一切顺利,直到将无效的文件路径用作XMLin()的参数.

应用程序终止,因为XML :: Simple在给出无效文件路径时使用了die()或类似的方法.

我希望我的应用程序继续运行,即使XML :: Simple遇到了错误.所以我该怎么做?

perl

1
推荐指数
2
解决办法
2143
查看次数

文件名与-e和perl中的正则表达式匹配

我需要检查目录中是否存在文件.文件名的格式如下:

/d1/d2/d3/abcd_12345_67890.dat

在我的程序中,我将知道文件名 abcd_

我需要if使用-e选项编写条件,并找到与给定模式匹配的文件.

regex perl

1
推荐指数
1
解决办法
7288
查看次数

为什么Params :: Validate回调失败了匿名函数引用?

我使用Params :: Validate进行验证,但是在回调部分而不是定义直接匿名函数,如果我尝试给出该​​匿名函数的引用,它会直接跳转到错误记录区而不在块内打印消息(在传递正确值的情况下).

use Params::Validate qw(:all);
our $attributeCallback = sub {
    my $parameter = shift;
    $parameter =~ m/^\w+$/i ;
};

sub getSingleValue {
    eval { 
        my ($domainName, $attribute) = validate_pos( @_,
            { 
                type => SCALAR, 
                callbacks => {
                    'Domain name validation failed' => &$attributeCallback
                } 
            },
            { 
                type => SCALAR, 
                callbacks => {
                    'Attribute name validation failed' => sub { 
                        $_[0] =~ m/[\w.-]+$/i } 
                } 
            }
        );
        print "domain name is $domainName and attribute is $attribute";
        1;
    } …
Run Code Online (Sandbox Code Playgroud)

perl anonymous-function

1
推荐指数
1
解决办法
279
查看次数

在Perl中,如何在遍历哈希时跳过空键?

这是我的问题,我对Perl知之甚少,而且我有这个功能需要修复.

deviceModelMenu()调用此函数时,CLI将显示以下文本:

The following models are available
==================================================
1.   
2. Cisco1240 
3. Catalyst3750 
4. Catalyst3650 
5. HP2524 

第一项是空的,这是错误的,我需要修复它,显示此菜单的代码片段是:

my $features = shift;
print "=" x 50, "\n";
print "The following models are available\n";
print "=" x 50, "\n";
my $i=1;
foreach (keys %{$features->{features}[0]->{deviceModel}})
{
    print "$i. $_ \n";
    $i++;
}
Run Code Online (Sandbox Code Playgroud)

如果我添加以下行:

warn Dumper($features->{features}[0]->{deviceModel});
Run Code Online (Sandbox Code Playgroud)

它抛弃了这个:

$VAR1 = {
      'deviceModel' => {
                         '' => {
                                 'cfg' => []
                               },
                         'Cisco1240' => {
                                        'cfg' => [
                                                 'cisco1240feature.cfg'
                                               ]
                                      },
                         'Catalyst3750' => { …

perl hash traversal

1
推荐指数
1
解决办法
1497
查看次数

在句子结尾处移动句点的正则表达式不是缩写

寻找有关如何删除句子中的句点字符但不删除缩写句点的一些想法.例如

"The N.J. turnpike is long. Today is a beautiful day."

将改为:

"The N.J. turnpike is long Today is a beautiful day"

regex perl pcre

1
推荐指数
1
解决办法
338
查看次数

Perl通过目录递归

基本上我要做的就是浏览目录并对所有文件执行操作,在本例中为子searchForErrors.这个子工作.到目前为止我所拥有的是:

sub proccessFiles{
    my $path = $ARGV[2];

    opendir(DIR, $path) or die "Unable to open $path: $!";
    my @files = readdir(DIR);
    @files = map{$path . '/' . $_ } @files;
    closedir(DIR);

    for (@files){
        if(-d $_){
            process_files($_);
        }
        else{
        searchForErrors;
    }
}
}

proccessFiles($path);
Run Code Online (Sandbox Code Playgroud)

任何帮助/建议都会很棒.而且,我是Perl的新手,所以解释越多越好.谢谢!

directory perl

1
推荐指数
1
解决办法
6100
查看次数