Ruby Regex:如果行不以>开头,则扫描字符串;

时间:2013-04-12 02:47:58

标签: ruby regex exit

我需要扫描文本文件,以便在不以>开头的行上出现“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

1 个答案:

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