2016-06-22 21 views
3

Ich überprüfe Java-Code und es gibt so viele Klassen zu überprüfen, habe ich eine Regex , um eine Methode in Java geschrieben, die nicht IO-Stream innerhalb endlich blockieren zu finden.Regex in Python für nicht übereinstimmende Wort

(?s)(?<=public|private|protected).(?<!finally).*?.close\(\)\;

Aus irgendeinem Grund dies nicht funktioniert und es passt auch jene Methoden, die schließlich blockieren hat, wird auch so unten gefunden

public testMethod(){ 
    InputStream stream = ..... 
    try{ 
    //do something 
    } finally { 
     if(stream != null){ 
     stream.close(); 
     } 
    } 
} 

Während nur unten abgestimmt werden sollte

public testMethod(){ 
    InputStream stream = ..... 
    //do something 
    if(stream != null){ 
    stream.close(); 
    } 
} 

Irgendwelche Zeiger?

+0

Eine Methode in Java kann einfach ohne '(public | private | protected)' auch – anubhava

+0

Danke für die Antwort, aber nehmen wir an, unsere Programmierer verwendet Zugriffsmodifikatoren für alle Methoden. –

Antwort

1

Ihre Regex sollte wahrscheinlich sein: (?s)(?<=public|private|protected)((?!finally).)*close\(\)\;. Demo auf regex101.

Erläuterung: ((?!finally).)* Überprüfen Sie, dass der Rest der Zeichenfolge finally nicht enthält.

Hinweis: Um alle Fälle abzudecken, möchten Sie vielleicht auch überprüfen, ob die close() tatsächlich in den Block der endgültigen ist. Sie können es mit einem Ausdruck wie (?s)(?<=public|private|protected)((?!finally[^}]*close\(\)\;).)*close\(\)\; tun.

+0

Works perfect danke, über close innen endlich blockieren, wie kann ich das erreichen? –

+0

@Dwarf_Ostrich Ich habe meine Antwort aktualisiert, bitte überprüfe sie – Richard

+0

Danke @Richard dafür !!! –

Verwandte Themen