Yes it will work (in worst case you would get inverted vectors in which case all you would do is negate the movement amount), however when it comes to moving and camera, moving should be based on character. You can place camera on character's eyes or behind afterwards. Character on a common FPS game that's on land doesn't need a matrix. You need only position and direction vectors from which you can easily calculate movement.

I mean, what if you want to tint camera sideways to simulate earthquake or something, then strafing based on camera matrix wouldn't go along with what character is doing, or if you look up, then he would suddenly not move forward quite the right direction...

Edit2: Ew, i think that's what you were trying to do all along...

Maybe try like this
[pascal]ctThirdPerson:
begin
Target.Move(AFactor);
Position := Vec3Subtract(Target.Position, AFactor);
// Reduce position by direction character is facing to whatever vector...
end;[/pascal]