(?:(?|(?:\")(?:[^\\\"]*(?:\\.[^\\\"]*)*)(?:\")))
which contains no capturing groups, hence $1 isn't populated. In my first bit of code, in the regex I added an extra set of parentheses, /($RE{delimited}{-delim=>'"'})/, so there is a capturing group there. That's the equivalent of:
((?:(?|(?:\")(?:[^\\\"]*(?:\\.[^\\\"]*)*)(?:\"))))
Alternatively, you can take the first regex above and just change the non-capturing group (?:...) that surrounds the entire expression into a capturing group:
((?|(?:\")(?:[^\\\"]*(?:\\.[^\\\"]*)*)(?:\")))
Or, since you said you wanted to capture the stuff between the quotes, change that non-capturing group into a capturing one:
(?:(?|(?:\")([^\\\"]*(?:\\.[^\\\"]*)*)(?:\")))
Plus, there's a bunch of simplifications that could be made to the first regex above anyway (really just removing unnecessary groups):
/ \" [^\\\"]* (?: \\. [^\\\"]* )* \" /x
and just add capturing groups to that as needed. |