【问题标题】:Perl regular expression to take all characters until end of line [duplicate]Perl正则表达式取所有字符直到行尾[重复]
【发布时间】:2015-01-01 01:53:49
【问题描述】:

我想简单地取所有字符直到行尾,并将它们放在一个变量中。这是一个可以解释更多的尝试:

open my $in, '<', 'in.txt';
$iteration = 0
while(<$in>){
    chomp;
    next if /^#|^$/;  //Skip over lines starting with # or empty lines.
    if($iteration==0) {
        die "Error in file formatting!\n" unless /^Data1: [.]*/; //*****
        my ($data1) = /Data[1]: ([.]*)/;  //*****
        $iteration++;
    }
    else if($iteration==1) {
        die "Error in file formatting!\n" unless /^Data2: \d+/;
        my ($data2) = /Data[2]: (\d+)/;
        $iteration++;

    }
    else if($iteration==2) {
        die "Error in file formatting!\n" unless /^Data3: \d+/;
        my ($data3) = /Data[3]: (\d+)/;
        $iteration=0;

    }
}

在循环内的第一个 if 语句中,它会在行首查找字符串“Data[1]:”,现在我想获取之后的所有内容,并将其放入变量中。所以,空格、标点符号、数字、下划线等都很好,但是一旦有新行出现,我想继续循环中的下一行,所以停在那里(我想停在行尾)。

【问题讨论】:

  • next if /\s*(?:#|$)/ 不会跳过空行或以# 开头的行。它会跳过所有包含# 的行,以及所有以行结尾的行。简而言之:所有行。
  • @TLP 实际上,这真的很有帮助,因为我认为这也解决了我的问题。我将如何查看它是否以 # 开头然后转到行尾?这基本上也是我在我的问题中需要做的。
  • [a-Z] 是无效范围。
  • 真的吗?它本来是有帮助的。如果你想跳过以# 开头的行,你需要用^ 锚定到行的开头:/^#//^\s*#/ 以允许可选的空格。
  • 非常感谢 TLP。我想我现在对正则表达式的所有选项有了更多的了解。

标签: regex perl


【解决方案1】:

/[.]+/ 匹配一个或多个.。您需要/.*/,它匹配除换行符以外的任意数量的字符。

my ($data1) = /^Data\[1\]: (.*)/
   or die "Syntax error\n";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多