In this blog article, you’re shown a quite long function that loop through your buffers to find out if any of them is associated with a file whose full name includes "projects". Well, you should not be afraid of using cl:

(require 'cl)
(loop for b being the buffers
      when (string-match "projects" (or (buffer-file-name b) ""))
      return t)

If you want to collect the list of buffers whose name matches your test, then replace return t by collect b and you’re done. Really, this loop thing is worth learning.