0

我需要扫描文本文件以查找不以 > 开头的行上是否出现“附加”。如果我找到附加,我退出 1,否则,一个 0

这是一个例子:

>hello!
>foo
>bag
>whatever
attach

该示例将以 1 退出。

>attach
>foo
>too

此示例将以 0 退出,因为唯一出现的附加出现在以 > 开头的行上。

这是我到目前为止所拥有的大纲,但是对于我如何使用 Ruby Regex 执行此操作,语法使我无法理解:

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

所以这里的想法是我满足扫描正在做的任何需求,如果我发现附加,则立即以 1 退出。

所以任何见解都会很棒!(注意:我不允许使用循环!)

注意:“附加”只需要出现在一行中的任意位置。所以一行看起来像这样:

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/)

零宽度负前向断言允许您匹配 not-> 而不消耗源的一部分(在第一个示例中,可能是附加的“a”)。

要求的成绩单:

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 回答