Regex to replace a string not within quotes (single or double)
java, regex
Solution
Try this regex: -
"or(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)"
It matches `or` which is followed by any characters followed by a certain number of pairs of `"` or `'`, followed by a any characters till the end.
String str = "this or \"that or\" or 'this or that'";
str = str.replaceAll("or(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)", "||");
System.out.println(str);
Output : -
this || "that or" || 'this or that'
The above regex will also replace `or`, if you have a mismatch of `"` and `'`.
For e.g: -
"this or \"that or\" or \"this or that'"
It will replace `or` for the above strings also. If you want it not to replace in the above case, you can change the regex to: -
str = str.replaceAll("or(?=(?:[^\"']*(\"|\')[^\"']*\\1)*[^\"']*$)", "||");
Problem
I have a input string this or "that or" or 'this or that' that should be translated to this || "that or" || "this or that" So the attempt is to look for an occurence of a string ( or ) within a string and replace it with another string ( || ). I have tried the following code ``` Pattern.compile("( or )(?:('.*?'|\".*?\"|\\S+)\\1.)*?").matcher("this or \"that or\" or 'this or that'").replaceAll(" || ") ``` The output is this || "that or" || 'this || that' The problem being that string within the single quote was also replaced. As for the code, the style is just for an example. I would compile the pattern and reuse it when I get this to work.