我有:
bigtext = "I am happy. We are happy. He is happy too."
我想扫描文本并在第一次出现时停止" happy"。
我试过了:
bigtext.scan(/happy?/)
我使用?
停止,但它继续scan
,并返回三次" happy"。
答案 0 :(得分:1)
...
validates :nested_1, # validations hash
validates :nested_2, # validations hash
...
您可以使用此^.*?happy
或m
模式。请参阅演示。
答案 1 :(得分:0)
/happy?/
将匹配"happ"
或"happy"
;您滥用?
(可选匹配)运算符。
您想要的不是scan
(全部出现),而是match
或=~
甚至是[]
。
bigtext =~ /happy/
# => 5
bigtext.match(/happy/)
# => #<MatchData "happy">
bigtext[/happy/]
# => "happy"
答案 2 :(得分:0)
你到底想要达到什么目的?如果你想知道字符串是否包含单词&#34; happy&#34;,为什么不使用
find = "happy"
if bigtext.include?(find)
return [find]
否则,如果需要正则表达式操作来返回数组
,则可以使用match
bigtext.match(/happy/).to_a # returns ["happy"]
答案 3 :(得分:0)
在scan
中使用一个块,并在完成该块中的所有操作后放置break
。
没有break
:
bigtext.scan(/happy/) do
p $` #`
end
# >> "I am "
# >> "I am happy. We are "
# >> "I am happy. We are happy. He is "
使用break
:
bigtext.scan(/happy/) do
p $` #`
break
end
# >> "I am "