2016-03-18 11 views
0

Ich versuche, einen regulären Ausdruck zu erstellen, der den äußeren Klammern entspricht, aber die Klammern der Kommentarzeilen innerhalb der äußeren Klammern ignoriert.Regulärer Ausdruck, um äußere Klammern zu entsprechen, aber Kommentarzeilen mit Klammern zu ignorieren

Beispiel string:

(
this is an example; 
// this is a comment line with an '(' in it and should be ignored 
this is (another) line; 
) 

Mein aktueller regex:

\(((?>\((?<c>)|[^()]+|\)(?<-c>))*(?(c)(?!)))\) 

das ist, was ich bekommen:

(' in it and should be ignored 
this is (another) line; 
) 

aber ich brauche diese:

this is an example; 
// this is a commentline with an '(' in it and should be ignored 
this is (another) line; 
+1

Können Sie nicht, wenn die Zeichenfolge mit einer Klammer beginnt? Es konnte keine Klammer einer Zeile für einen Kommentar auf diese Weise übereinstimmen. – Dispersia

+0

Warum Regex verwenden, wenn die öffnende und schließende Klammer ein einzelnes Zeichen in der neuen Zeile ist? – Camo

+0

Dies ist nur ein Beispiel. Die Klammern können auch in derselben Zeile stehen. – Sheik

Antwort

1

Hier sind die Möglichkeiten, dies zu tun.

  • Mit (?<=\()(.*?)(?=\))Demo die look around Behauptungen verwendet.

  • Verwenden \((.*?)\)Demo, die erfasste Gruppe verwendet. Erfassen Sie \1.

Anmerkung: Verwenden DOTOALL flag s. passenden newlines zu ermöglichen.

Fixed your demo mit lazy Quantifikator ?.


Die obige Regex würde in vielen Fällen arbeiten. Nach vielen weiteren Spezifikationen des OP ist hier die finale Demo.

Final Demo

+0

funktioniert nicht für mich Siehe [link] (https://regex101.com/r/uH2lZ1/1) Ich brauche eine Übereinstimmung für jede äußere Klammern.Wenn Sie wissen, was ich meine? – Sheik

+0

@Sheik: Lassen Sie mich überprüfen.Überprüfen Sie die aktualisierte Antwort.Ich habe enthalten Ihre Demo in meiner Antwort –

+0

Es tut mir leid. Ich habe vergessen, weitere Klammern hinzuzufügen. Manchmal habe ich mehr innere Klammern. [link] (https: // regex101 .com/r/uH2lZ1/3) Das war der Grund für meine Bilanzkreise. – Sheik

0

Versuchen Sie, diese

\((([^)]+)|(\/\/[^\n]+\n))\) 
+1

Es würde Ihre Antwort verbessern, wenn Sie erklären, wie das, was Sie vorschlagen, das Problem löst. – Nanhydrin

Verwandte Themen