I want to create a regex that satisfies the following condition:
- Can contain any character that is not
\nand\r. Can be empty string. - Can contain
\"and\\, but"and\are not allowed.
Positive examples: abc d, my \"time\", D:\\willy\\wonka, foo\\\"bar.
Negative examples: my "laser", D:\willi\badehose, foo\\"bar.
I tried using positive lookbehind, but abc d is not matched and foo\\"bar is matched:
^[^\r\n]*(?<=\\)("|\\)[^\r\n]*$
How can I fix this? Here is the link to regex101 for ease of testing: https://regex101.com/r/I1byls/1
CodePudding user response:
You might use a pattern to exclude matching newlines, \ or " and only match \" or \\
As all the quantifiers are optional, you could also match an empty string.
^[^\r\n"\\]*(?:\\["\\][^\r\n"\\]*)*$
The pattern matches:
^Start of string[^\r\n"\\]*Optionally match any char except the listed in the character class(?:Non capture group to repeat as a whole\\["\\]Match either\"or\\[^\r\n"\\]*Optionally match any char except the listed in the character class
)*Close non capture group and optionally repeat$End of string
