【问题标题】:Matching string exactly from a list of similar strings in Perl从 Perl 中的相似字符串列表中精确匹配字符串
【发布时间】:2015-09-23 04:27:46
【问题描述】:

我有一个文件,其中包含以下几行

1.39.2.1    Build 001

1.39.1.2    Build 002

1.39.1.1    Rejected Build

1.39        Succesful Build 004

我正在尝试打印“1.39 Succesful Build 004”行 下面是我的 perl 脚本

my $file = 'C:\labels.txt';

open(FILE,$file) or die ("Cannot the open the file : $file");

my $ver = "1.39";

my @arr;

foreach (FILE)
{

    if($_  =~ m/1.39/)
    {
        print $line;

    }

}

close(FILE);

当我运行此脚本时,它会打印所有行(包括 1.39.x.x)。但我想要正好有 1.39 的线。怎么能搜到呢。

感谢任何帮助。

【问题讨论】:

  • 我尝试使用 ($_ =~ m/^1.39$/),在这种情况下不打印任何行。
  • 它不起作用,因为^1.39$ 将尝试查找开头为 1 且结尾为 9 的行。你没有这样的台词。
  • 如果你想要1.39 来自1.39.2.1,你需要在你的正则表达式中捕获它们。 if($_ =~ m/(1.39)/) 结果将在 $1 中。
  • 感谢您的时间和精力。

标签: regex perl


【解决方案1】:

我猜你正在尝试匹配表示构建成功的行。

#!/usr/bin/perl
use strict;
use warnings;
while(<DATA>){
    next if $_ =~ /^\s*$/; #skip empty lines
    my ($build, @status) = split /\s+/;
    print $_ if join(",", @status) =~ /Succesful/;
    #you may modify the above regex based on your requirement
    #I tried to match line which says build is successful
    #See dawg's answer, he matched exact build 1.39
}
__DATA__
1.39.2.1    Build 001

1.39.1.2    Build 002

1.39.1.1    Rejected Build

1.39        Succesful Build 004

Demo

【讨论】:

    【解决方案2】:

    如果您希望与其他行不匹配,请在 1.39 之后使用空格,如下所示:

    /^1.39\s/
    

    Demo

    【讨论】:

    • 也需要^ 以避免匹配11.391.39.1.39
    【解决方案3】:

    尚未有人花时间解释您现有代码为何不起作用。我认为这是因为您对正则表达式的工作原理有些困惑。

    如果正则表达式模式匹配字符串中的任何位置,则文本字符串将匹配正则表达式。

    您的正则表达式是/1.39/。实际上,有一个小问题,因为点在正则表达式中具有特殊含义(它匹配任何字符),因此要匹配实际的点,您需要对其进行转义,并且您的正则表达式变为 /1\.39/

    好的,现在您的正则表达式会询问“此字符串是否包含子字符串“1.39”。当然,您的所有数据行都包含该子字符串。例如,1.39.2.1 Build 001 行包含“1.39” -它在一开始就在那里。当然,它后面是其他东西,但是正则表达式匹配并不关心这一点。正则表达式匹配只是询问“这个字符串是否包含这个子字符串?”

    因此,您需要更精确地使用正则表达式。您需要自己匹配“1.39”,行前没有任何内容,后面只有空格。这就是其他答案的来源。您可以将^ 放在正则表达式的开头以匹配行的开头,将\s 放在末尾以匹配空格。所以你的正则表达式变成/^1\.39\s/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多