Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex match unescaped quotes

Tags:

regex

ruby

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

like image 379
dfherr Avatar asked Jun 13 '14 16:06

dfherr


1 Answers

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)

like image 172
Casimir et Hippolyte Avatar answered Oct 05 '22 22:10

Casimir et Hippolyte