Sto facendo un po 'di ginnastica di espressione regolare. Mi sono posto il compito di provare a cercare il codice C# in cui vi è un utilizzo dell'operatore as non seguito da un controllo null all'interno di una quantità ragionevole di spazio. Ora non voglio analizzare il codice C#. Per esempio. Voglio catturare frammenti di codice comeEspressioni regolari lookahead negativo
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1.a == y1.a)
tuttavia, non catturare
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1 == null)
né per quella materia
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(somethingunrelated == null) {...}
if(x1.a == y1.a)
Pertanto, qualsiasi null-controllo casuale conterà come un "buon controllo "e quindi non trovato.
La domanda è: Come faccio ad abbinare qualcosa assicurando che qualcos'altro non si trova nei suoi dintorni.
Ho provato l'approccio ingenuo, cercando 'come' quindi facendo un lookahead negativo entro 150 caratteri.
\bas\b.{1,150}(?!\b==\s*null\b)
L'espressione regolare precedente corrisponde a tutti gli esempi precedenti in modo infondato. Il mio istinto mi dice che il problema è che guardando avanti e facendo un lookahead negativo si possono trovare molte situazioni in cui il lookahead non trova il valore '== null'.
Se provo a negare l'intera espressione, anche questo non aiuta, a questo corrisponderebbe la maggior parte del codice C#.
Non è possibile utilizzare un parser C# corretto? – Gumbo
Ho detto all'inizio "Sto facendo un po 'di ginnastica di espressione regolare, mi sono dato il compito di cercare C#" ... –
È come guardare il calcio e pensare "è come fare ginnastica"? :-) – xanatos