0

テキスト ファイルをスキャンして、> で始まらない行に "attach" があるかどうかを調べる必要があります。接続が見つかった場合は 1 で終了し、そうでない場合は 0 で終了します

次に例を示します。

>hello!
>foo
>bag
>whatever
attach

そして、その例は 1 で終了します。

>attach
>foo
>too

この例は、> で始まる行に attach が出現するだけなので、0 で終了します。

これは私がこれまでに持っているものの概要ですが、Ruby Regex でこれをどのように行うかについては、構文がわかりません。

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

したがって、ここでの考え方は、スキャンが行っているすべての要件を満たし、接続が見つかった場合はすぐに 1 で終了するというものです。

だからどんな洞察も素晴らしいでしょう!(注: ループの使用は許可されていません!)

注: 「attach」は、行のどこにでも表示する必要があるだけです。したがって、次のような行になります。

file hello attach hi

1 で終了します。

編集:

以下は、私が実行している現在の test.txt ファイルです。これを実行するための私の構文は、1.9.3 の下で、

ruby 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
4

1 に答える 1

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

ゼロ幅の負の前方アサーションにより、ソースの一部 (最初の例では、attach の 'a' である可能性があります) を消費することなく、not-> に一致させることができます。

要求されたトランスクリプト:

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

julian@maw learn $ cat g
> attach
> hello!
> how are you?
> also >'d attach
julian@maw learn $ irb
2.0.0-p0 :001 > text = IO.read('g').scan(/^(?!>).*?attach/)
 => [] 
2.0.0-p0 :002 > 
于 2013-04-12T03:00:03.433 に答える