如何使用perl正则表达式查找不包含冒号符号的文本行

时间:2015-09-18 21:45:55

标签: regex perl

例如,我试图不使用以下

查找文本行
    !dkdkdkdkdk: dkdkdkdkdkdkdkadfkldllsls  <------ do not find this line of code

    !dksdjfslfjlk afldajfdklafjdla;fd        <-------- find this line of code

我尝试了以下代码,但没有工作。

           ^!(?!:)*$

2 个答案:

答案 0 :(得分:2)

如果您有多行输入,则需要逐行读取数据并检查每行是否以!开头,并且不包含:以及以下正则表达式:

/^![^:]*$/

或者如果你想分割条件:

if (/^!/ and not /:/)

字符类[^:]将匹配:以外的任何字符。

以下是工作样本:

#!/usr/bin/perl
use strict;
use warnings;

my @matches;
while (<DATA>) {
    if (/^![^:]*$/) {
        push @matches, $_;
        print "$_\n";
    }
}

__DATA__
!dkdkdkdkdk: dkdkdkdkdkdkdkadfkldllsls
!dksdjfslfjlk afldajfdklafjdla;fd

请参阅IDEONE demo

@matches将包含通过测试的所有行。

答案 1 :(得分:2)

有什么问题吗?
if ( /^!/ and not /:/ ) { ... }