2013-04-12 3 views
0

Мне нужно отсканировать текстовый файл для появления «attach» в строке, которая не начинается с>. Если я нахожу прикрепить к нему, я выхожу с 1, в противном случае 0Ruby Regex: сканирование строки, если строка не начинается с>

Вот пример:

>hello! 
>foo 
>bag 
>whatever 
attach 

И этот пример будет завершаться с 1.

>attach 
>foo 
>too 

В этом примере будет иметь выдается с 0, так как единственное появление attach появляется в строке, начинающейся с a>.

Это набросок того, что я до сих пор, но синтаксис ускользает от меня за то, как я хотел бы сделать это с Руби Regex:

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

Так что идея здесь заключается в том, что я выполняю то, что требование о проверке делает, и немедленно выйдите с 1, если я нашел прикрепление.

Таким образом, любое понимание было бы замечательным! (Примечание: мне не разрешено использовать цикл!)

ПРИМЕЧАНИЕ: «Прикрепить» необходимо только появляться на линии в любом месте линии. Таким образом, линия вида:

file hello attach hi 

бы выйти с 1.

EDIT:

Ниже текущий файл 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/) 

Условное отрицательное утверждение с нулевой шириной позволяет вам сопоставить не-> без использования части источника (что может быть, i 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

Смежные вопросы