我需要扫描文本文件,以便在不以>开头的行上出现“attach”。如果我找到附着,我退出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
然后我回应了回报:
echo $?
这是名为test.txt
的文件> attach
> hello!
> how are you?
attach
该文件应该返回1。
使用该文件,这是我想要看到的内容:
-bash-4.1$ ruby attach.rb test.txt
-bash-4.1$ echo $?
0
答案 0 :(得分: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 >