2013-04-12 46 views
0

我需要掃描一個文本文件的一個「附加」的行不以>開頭。如果我發現重視,我用1退出,否則,0Ruby正則表達式:掃描字符串,如果行不開始>

下面是一個例子:

>hello! 
>foo 
>bag 
>whatever 
attach 

而且這個例子將與1

>attach 
>foo 
>too 

這個例子退出將有用0退出,因爲唯一出現的連接出現在以>開頭的行上。

這是我到目前爲止的輪廓,但語法逃脫我要我怎麼會做這個用紅寶石正則表達式:

text = IO.read(ARGV[0]).scan(/^"[attach]"/)exit!(1) 
exit(0) 

所以這裏的想法是,我滿足任何要求掃描正在做,並立即退出1,如果我發現附加。

所以任何見解都會很棒! (注意:我不允許使用循環!)

注意:「attach」只需要出現在行的任何位置。於是一行看起來像這樣:

file hello attach hi 

將與1

編輯退出:

以下是我對當前運行的test.txt文件。我運行這個語法是,1.9.3下,

紅寶石attach.rb的test.txt

,然後我回聲出回報:

回聲$?

這是文件,名爲test.txt

> attach 
> hello! 
> how are you? 
attach 

該文件應返回1.

使用該文件,這是我希望看到的:

-bash-4.1$ ruby attach.rb test.txt 
-bash-4.1$ echo $? 
0 

回答

2
text = IO.read(ARGV[0]).scan(/^(?!>).*?attach/) 

零寬度負向前斷言允許您匹配not->不消耗部分源(可能是,我n第一個例子,附件的'a')。

請求的成績單:

[email protected] learn $ cat f 
> attach 
> hello! 
> how are you? 
attach 
[email protected] learn $ irb 
2.0.0-p0 :001 > text = IO.read('f').scan(/^(?!>).*?attach/) 
=> ["attach"] 
2.0.0-p0 :002 > 

[email protected] learn $ cat g 
> attach 
> hello! 
> how are you? 
> also >'d attach 
[email protected] learn $ irb 
2.0.0-p0 :001 > text = IO.read('g').scan(/^(?!>).*?attach/) 
=> [] 
2.0.0-p0 :002 > 
+0

看起來不錯,但是,它仍然返回0,當它不應該是 – iMatthewCM

+0

當是什麼? –

+0

如果單詞「attach」出現在不以a開頭的行上,則返回1.如果沒有這種情況,則返回0. – iMatthewCM

相關問題