dfherr
dfherr

Reputation: 1642

Regex match unescaped quotes

I'm looking for a regex that matches unescaped quotes in an arbitrary string, but not quotes that are already escaped so I can escape the unescaped quotes. I tried to modify any similar solutions I found but nothing captured exactly what I need.

The regex should

abc"asd # match
abc\"asd # not match
abc\\"asd # match
abc\\\"asd # not match
abc\\\\"asd # match

so basically match any quotes preceded by an even number of backslashes (including zero) but not match any quotes preceded by an odd number of backslashes.

Can anyone help?

PS: I want to do this in ruby

Upvotes: 9

Views: 5124

Answers (2)

Casimir et Hippolyte
Casimir et Hippolyte

Reputation: 89557

You can use this:

(?<!\\)(?:\\{2})*\K"

(?<!\\) checks there is no backslash before (negative lookbehind)

(?:\\{2})* matches all even numbers of backslashes

\K removes all on the left from the match result (the backslashes here)

Upvotes: 20

matt
matt

Reputation: 115

It seems that you may be looking for something like this:

(\\\\)*"

Upvotes: -3

Related Questions