所以我想在其中匹配一个字符串和单词"cat",例如:
"cat cat cat cat cat"
Run Code Online (Sandbox Code Playgroud)
要么
"cat cat cat cat"
Run Code Online (Sandbox Code Playgroud)
如果除了"cat"或空格之外还有其他任何东西,我不想匹配.所以我可以这样做:
^(cat\s*)+$
Run Code Online (Sandbox Code Playgroud)
但是,我想知道字符串中出现了多少只猫.一种方法是计算组的数量,但是上面的正则表达式只会给我一个第一只猫的组,而不是每只猫的捕获.有没有办法使用正则表达式?
我没有看到有人提到我认为明显的答案,使用String#scan:
str = "cat cat cat catcat"
str.scan('cat').size #=> 5
Run Code Online (Sandbox Code Playgroud)
如果你只需要使用正则表达式:
str.scan(/cat/).size #=> 5
Run Code Online (Sandbox Code Playgroud)
如果您只想捕获唯一的,而不是一起运行的事件:
str.scan(/\bcat\b/).size #=> 3
Run Code Online (Sandbox Code Playgroud)
编辑:
@sawa指出存在(相当大的)误解OP问题的空间.这覆盖了OP不想发生的搜索,如果东西,除了案件cat和" "是的字符串中.
str.scan('cat').size if str.gsub(/(?:cat| )+/, '').empty? #=> 5
Run Code Online (Sandbox Code Playgroud)
我上一节中的其他变体仍然可以应用.
并且,由于"空白"可能意味着不仅仅是一个简单的空间,"\s"也应该工作正常.