If you insist on fixing your regexp, the error message would be needed, but I'm guessing Postgres is spitting out a column not found error or something to that order if your original query is anything to go by. The reason is that you're using double quotes; these are used to quote identifiers in Postgres, in much the same way as backticks are in MySQL.
Also note that Postgres offers something better than what you're trying to achieve with the query you posted, in the form of full text search. To illustrate, you could use something like:
...
where (setweight(to_tsvector(coalesce(users.name, '')), 'A') ||
setweight(to_tsvector(coalesce(users.login, '')), 'B') ||
setweight(to_tsvector(coalesce(users.bio, '')), 'D') ||
setweight(to_tsvector(coalesce(links.lv, '')), 'B')
) @@ plainto_tsquery(:query)
http://www.postgresql.org/docs/current/static/textsearch.html
$q
? Show us the PHP code that invokes this SQL and the exact text of any error message. – Craig Ringer Dec 24 '13 at 1:06