"Pharo Smalltalk"

search1st := [:str :kw | str includesSubstring: kw].

search2nd := [:str :kw | (str splitOn: kw) size - 1 ].

search3rd := [:str :kw |
 Array streamContents: [:ss |
  (str lines collect: #readStream) doWithIndex: [:strm :idx |
   [strm match: kw] whileTrue: [ss nextPut: idx -> (strm position - kw size + 1)].
  ]
 ]
].

http://ws.stfx.eu/DQART2BS6GYF