Я занимаюсь гимнастикой регулярного выражения. Я поставил себе задачу попытаться найти код C#, где используется оператор as-operator, за которым не следует нуль-проверка в разумном объеме пространства. Теперь я не хочу разбирать код C#. Например. Я хочу, чтобы захватить фрагменты кода, такие какРегулярные выражения отрицательный lookahead
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)
Вышеприведенное регулярное выражение соответствует всем приведенным выше примерам, к счастью. Моя кишка говорит мне, проблема в том, что поиск вперед, а затем выполнение негативного взгляда может найти множество ситуаций, когда lookahead не находит «== null».
Если я попытаюсь отрицать все выражение, то это тоже не поможет, при этом будет соответствовать весь код C#.
Не можете ли вы использовать правильный парсер C#? – Gumbo
В начале я сказал: «Я занимаюсь гимнастикой регулярного выражения. Я поставил перед собой задачу поиска C#» ... –
Это как смотреть футбол и думать «это как заниматься гимнастикой»? :-) – xanatos