Perl正则表达式输出不包含字符的行

时间:2012-03-22 21:53:49

标签: regex perl

基本上有两种类型的线(简化):

“John”(2002)

Amy(1991)

开头可能有也可能没有标签。我想只得到不包含双引号的行。到目前为止我已经

if( /([^\t]*) [\t]+ ^("(.*?)") ([^\t]+ [\ ]* [\(][\d]+[\)])/) 

如果我取出克拉标志,它会用双引号抓住线条。我希望它做相反的事情,但它不起作用。

5 个答案:

答案 0 :(得分:3)

我会尝试这个(或者我会简化太多吗?):

jj@ubuntu:~$ cat /tmp/x.txt 
"John" (2002)
Amy (1991)
rc@ubuntu:~$ perl -ne 'print unless /"/' < /tmp/x.txt 
Amy (1991)

答案 1 :(得分:1)

^[^"]*$

使用修饰符让^ $在换行符匹配

我最初建议环顾,但这里不需要

^((?!").)*$)

答案 2 :(得分:0)

试试这个:

if (/^\s*([^"\s]+)\s*\((\d+)\)\s*$/) {
}

答案 3 :(得分:0)

如果您已经知道

if (/regex/) { ... }

与你想做的事情相反,不要试图找出/regex/的“对立面”是什么。使用if

的反义词更容易理解
unless (/regex/) { ... }
if ( !/regex/ ) { ... }

答案 4 :(得分:0)

我认为你可以使用!/"/作为/^[^"]*$/

的等价物