# How to count a word in a line

**URL:** <https://www.ruby-forum.com/t/how-to-count-a-word-in-a-line/92445>\
**Category:** Ruby\
**Created:** [April 19, 2007, 4:10pm UTC](https://www.ruby-forum.com/t/how-to-count-a-word-in-a-line/92445 "2007-04-19T16:10:29Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![yusufcelik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ba9def/32.png) [@yusufcelik](https://www.ruby-forum.com/u/yusufcelik)\
**Post date:** [April 19, 2007, 4:10pm UTC](https://www.ruby-forum.com/t/how-to-count-a-word-in-a-line/92445/1 "2007-04-19T16:10:29Z")

</div>

Hi,  
I wonder if there is a way of counting a word in a line using ruby  
regexp.  
Such as how many “Hi”'s in a line.  
Let’s say when I enter a line  
“Hello and Hi there hey hear my Hi”  
It should give me 2, because there are 2 “Hi”'s.  
I have something like this but looks awkward.  
while line=gets.chomp  
cnt = 0  
line.split.each {  
|v|  
if v == ‘Hi’ then  
cnt +=1  
end  
}  
break if cnt \> 2  
end

Thanks in advance  
Yusuf C.

---

<div class="post-metadata">

**Author:** ![yusufcelik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ba9def/32.png) [@yusufcelik](https://www.ruby-forum.com/u/yusufcelik)\
**Post date:** [April 19, 2007, 4:16pm UTC](https://www.ruby-forum.com/t/how-to-count-a-word-in-a-line/92445/2 "2007-04-19T16:16:30Z")

</div>

Sorry made a mistake  
line=gets.chomp  
cnt = 0  
line.split.each {  
|v|  
if v == ‘Hi’ then  
cnt +=1  
end  
}  
puts “#{cnt}”

---

<div class="post-metadata">

**Author:** ![yusufcelik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ba9def/32.png) [@yusufcelik](https://www.ruby-forum.com/u/yusufcelik)\
**Post date:** [April 19, 2007, 4:26pm UTC](https://www.ruby-forum.com/t/how-to-count-a-word-in-a-line/92445/3 "2007-04-19T16:26:04Z")

</div>

Hi –

On 4/19/07, Yusuf C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Sorry made a mistake  
> line=gets.chomp  
> cnt = 0  
> line.split.each {  
> |v|  
> if v == ‘Hi’ then  
> cnt +=1  
> end  
> }  
> puts “#{cnt}”

You could do:

line.scan(/\bHi\b/).size

(or \s instead of \b if you want it to be spaces instead of word  
boundaries [which can also be hyphens and other punctuation]).

David

---

<div class="post-metadata">

**Author:** ![yusufcelik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ba9def/32.png) [@yusufcelik](https://www.ruby-forum.com/u/yusufcelik)\
**Post date:** [April 19, 2007, 4:30pm UTC](https://www.ruby-forum.com/t/how-to-count-a-word-in-a-line/92445/4 "2007-04-19T16:30:04Z")

</div>

Yusuf C. wrote:

> 

Isn’t there some totally unreadable regex that does this? 🙂

–  
M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P)  
[http://borasky-research.net/](http://borasky-research.net/)

If God had meant for carrots to be eaten cooked, He would have given  
rabbits fire.

---

<div class="post-metadata">

**Author:** ![yusufcelik](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/ba9def/32.png) [@yusufcelik](https://www.ruby-forum.com/u/yusufcelik)\
**Post date:** [April 19, 2007, 4:34pm UTC](https://www.ruby-forum.com/t/how-to-count-a-word-in-a-line/92445/5 "2007-04-19T16:34:37Z")

</div>

Thanks David,

What can I say I am speechless.  
Just 1 line wow.

Thanks anyway  
Yusuf

> You could do:
> 
> line.scan(/\bHi\b/).size
> 
> (or \s instead of \b if you want it to be spaces instead of word  
> boundaries [which can also be hyphens and other punctuation]).
