You can simply make the .*
not greedy .*?
(?<=CVC=\").*?(?=")
In answer to your 2nd question, java regex (and most other engines) don't allow variable length lookbehinds. Usually though, you can solve a problem that would require a variable length lookbehind by using capture groups:
(?<=CreditCard.*CVC=\").*?(?=")
becomes:
CreditCard.*?CVC=\"(.*?)"
And then you can take the relevant information from capture group 1.
RegExr (.*
added on RegExr so that output replaces the entire input, its not required for your case though.)