Я пытаюсь сопоставить выражения, содержащиеся в [%___%]
в строке, до //
(комментарии), исключая //
в кавычках (внутри строки)
так например
[%tag%] = "a" + "//" + [%tag2%]; //[%tag3%]
должно соответствовать [%tag%]
и [%tag2%]
Самое близкое, что я могу получить, это ^(?:(?:\[%([^%\]\[]*)%\])|[^"]|"[^"]*")*?(?://)
Итак, у меня проблемы с тем, что это не соответствует ни одной строке, которая не заканчивается на //
Фактически, он агрегирует строки до тех пор, пока не завершится в одной, содержащей //
Я попытался исправить эту проблему с помощью ?.*?$
в конце, чтобы показать, что //
не требуется, и перейти к первой конечной строке, но на самом деле это не работает.
И во-вторых, захватывает только второй тег. Это не из-за "//"
, так как даже с [%1%] [%2%]
он не будет захватывать первые
Я использую C # и Regex.Matches
с опцией RegexOptions.Multiline
, и это моя экранированная строка
"^(?:(?:\\[%([^%\\]\\[]*)%\\])|[^\"]|\"[^\"]*\")*?(?://)"