Correctly using regexp_replace

I've got two things I want to use this for. One. Strip out any invalid characters from first_name, middle_name, and last_name. I had a first_name with a strange vertical rectangle before the first name. I still don't know what it was. Two. replace any invalid punctuation in a name. I had a last name like De'Shull, that was using De"Shull. I needed to replace the double quote with a single. I want to do this with one pass through the function. My problem is simple comprehension of what something like this example regexp_replace(n.last_name, '^.*".*".*"(.*)".*$', '\1') is doing. And I don't know if something like the following would do everything I need. regexp_replace(b.first_name, '[^'||chr(32)||'-'||chr(126)||']')