Perl正则表达式匹配元字符

时间:2013-11-07 19:01:17

标签: regex perl

我有一个文本文件,如下所示。

Jack       Boy
Jill       Girl
Jam        ????
John       Boy
Michelle   Girl

我写过这篇文章,我打算只匹配包含两个单词而不是行Jam ????的行。它不起作用。

if ( $line =~ ( /(\w+)\s+(\w+)/ ) && !( m/\?\?\?\?/ ) ) 

4 个答案:

答案 0 :(得分:2)

如果您还处理数据,那么正则表达式就是错误的工具

您应该简单地将每一行拆分为字段,并检查第二个字段是否只包含问号。

喜欢这个

use strict;
use warnings;

while (my $line = <DATA>) {
  my @fields = split ' ', $line;
  next unless $fields[1] =~ /[^?]/;
  print $line;
}

__DATA__
Jack       Boy
Jill       Girl
Jam        ????
John       Boy
Michelle   Girl

<强>输出

Jack       Boy
Jill       Girl
John       Boy
Michelle   Girl

答案 1 :(得分:1)

这些只是两个选项:两个单词或一个单词????

如果是这样,第一部分/(\w)+\s+(\w+)/就足够了。

\w?不符。

答案 2 :(得分:0)

我认为没有必要为您的特定输入匹配元字符:

use warnings;
use strict;

while (<DATA>) {
    print if /(\w+)\s+(\w+)/;
}

__DATA__
Jack       Boy
Jill       Girl
Jam        ????
John       Boy
Michelle   Girl

答案 3 :(得分:0)

之前的答案已经涵盖了这不是真正正确的过程,但有时通过正则表达式过滤字符串在单个if语句中很有用。

你几乎拥有它!它在if语句的后半部分缺少匹配的运算符。

if ($line =~ (/(\w+)\s+(\w+)/) && !($line =~ m/\?\?\?\?/))