Нет, ("|').*?(\1)
невозможно. Я бы тоже не делал .*?
, но что-то вроде этого:
STRING
: '"' ~["]* '"'
| '\'' ~[']* '\''
;
Или, если вы разрешите экранированные символы:
STRING
: '"' ( ~["]* | '\\' . )* '"'
| '\'' ( ~[']* | '\\' . ) '\''
;
Также обратите внимание, что ~["]*
также соответствует разрывам строк. Если вы этого не хотите, сделайте следующее: ~["\r\n]*