2012-03-22 100 views
0

基本上有兩種類型的線(簡化)輸出線:Perl的正則表達式來不包含字符

「約翰」(2002)

艾米(1991)

可能有也可能沒有一開始就是標籤。我只想得到不含雙引號的行。到目前爲止,我有

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

如果我拿出克拉標誌,它會用雙引號抓住行。我希望它做相反的事情,但它不起作用。

+0

等效是否需要Perl的是? ''sed'/「/ d'inputfile.txt'' – 2012-03-22 22:04:26

回答

1
^[^"]*$ 

隨着這讓^ $在行比賽打破

我本來建議環視,但它不是在這裏需要

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

它使用了一種名爲positive lookahead的技術,您可以在這裏閱讀http://www.regular-expressions.info/lookaround.html在Perl中獲取數組在字符串中的所有正則表達式匹配使用@result = $ subject =〜m /^(?!").*$/ mg; – buckley 2012-03-22 21:59:55

+0

if(/([^ \ t] *)[\ t] + ^(?!「)。* $([^ \ t] + [\] * [\(] [\ d] + [\)] )/) 像這樣??它不起作用 – user1224478 2012-03-22 22:02:24

+0

@ user1224478不,它只是簡單的正則表達式^(?!「)。* $將只匹配不包含雙引號的行」 – buckley 2012-03-22 22:11:43

3

我想嘗試這種改性劑(或我簡化太多?):

[email protected]:~$ cat /tmp/x.txt 
"John" (2002) 
Amy (1991) 
[email protected]:~$ perl -ne 'print unless /"/' < /tmp/x.txt 
Amy (1991) 
+1

你可以簡化(或高爾夫球),以'perl -ne'/「/ ||打印'x.txt' – DavidO 2012-03-22 22:22:10

+1

或unix-golf將它打到'grep -v'''x.txt' :) – 2012-03-22 22:43:53

+0

一個字符'grep -v \「x.txt' – 2012-03-22 23:34:53

0

試試這個:

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

如果你已經知道

if (/regex/) { ... } 

做你想要做的正好相反,不要試圖找出的/regex/「對立」是什麼。它更理解使用的if相反:

unless (/regex/) { ... } 
if (!/regex/) { ... } 
0

我想你可以使用!/"//^[^"]*$/

相關問題