Я занимаюсь гимнастикой с регулярными выражениями.Я поставил перед собой задачу поиска кода на C #, где используется оператор as, за которым не следует нулевая проверка в разумных пределах пространства.Теперь я не хочу разбирать код C #.Например, я хочу захватывать фрагменты кода, такие как
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1.a == y1.a)
, но не захватывать
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1 == null)
, ни в коем случае
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(somethingunrelated == null) {...}
if(x1.a == y1.a)
Таким образом, любая случайная нулевая проверкабудет считаться "хорошим чеком" и, следовательно, не найден.
Вопрос в следующем: Как мне сопоставить что-либо, при этом убедившись, что что-то еще не найдено в его окружении.
Я пробовал наивный подход, ища «какзатем делает отрицательный прогноз в пределах 150 символов.
\bas\b.{1,150}(?!\b==\s*null\b)
Вышеуказанное регулярное выражение, к сожалению, соответствует всем приведенным выше примерам.Моя интуиция говорит мне, что проблема в том, что если смотреть в будущее, а затем делать отрицательный прогноз, можно найти много ситуаций, когда он не найдет «== ноль».
Если я попытаюсь отрицать все выражение целиком, то это тоже не поможет, в этом случае будет соответствовать большинство кодов C # вокруг.