2016-03-31 17 views
0

Ich habe Java-Code und ich möchte C-Datei analysieren und alle Kommentare finden.Java: Regulärer Ausdruck verursacht Stapelüberlauf

Um alle Kommentare zu finden, die Linie oder Linien sind, die mit */ mit /* beginnen und enden ich diesen Regulärer Ausdruck verwenden: Pattern.compile("/\\*(?:.|[\\n\\r]|[\\n])*?\\*/")

Das Problem ist, dass einiger Eingabestapelüberlauf verursacht.

Ich habe über dieses Problem gelesen und verstanden, ich werde vermeiden, | in der Regex zu verwenden. Ich bin neu in der Regex-Welt. Kann mir jemand helfen, es einfacher zu machen?

+1

Würde es Ihnen etwas ausmachen, die Eingabe einzuschließen, die das Problem verursacht? – f1sh

+0

Was für ein gemeinsames schlechtes Muster. Verwende 'Pattern.compile (" (? S) /\\*.*?\\*/ ")' oder besser: '"/\\ * [^ *] * \\ * + (?: [^/*] [^ *] * \\ * +) */"' –

Antwort

1

Ihr Zeilenumbruch ist nicht korrekt.

Versuchen Sie, diese zu nutzen:

Pattern.compile("/\\*.*?\\*/", Pattern.MULTILINE|Pattern.DOTALL); 

Dies ermöglicht Ihre . Charakter Zeilenumbrüche und anzupassen.

+0

Danke für das Muster + Erklärung! –

+0

@ user5699936: Achte darauf: 1) mit sehr sehr langen Kommentaren, das wird nicht funktionieren oder wird sehr langsam, 2) 'Pattern.MULTILINE' sollte entfernt werden. Nicht * 'This' *, aber' Pattern.DOTALL' lässt die '.' auch zu neuen Zeilenfolgen passen. –