Regex mit Negation

Alan47

Mitglied
Hallo zusammen,

ich bin im Moment auf der Suche nach einem regulären Ausdruck, der alle Javadoc-Kommentare finden soll. Aktuell habe ich folgenden String (bitte beachten: es ist bereits ein Java-String, Backslashes sind also doppelt!)

Java:
String javadocRegex = "/\\*(\\*)?([\\w|\\W|\\s|\\S])*\\*/";

Nun, das Problem ist folgendes: der Ausdruck "[\\w|\\W|\\s|\\S]" passt auf zu vieles, nämlich auch die beendende Sequenz "\\*/". Wenn ich also folgenden String mit der Regex überprüfe:

Java:
/** ein Javadoc-Kommentar
*/
public void methodA(){
}
         
/** ein anderer Javadoc-Kommentar
*/
public void methodB(){
}


... dann findet Java hier den größtmöglichen Bereich zwischen "/**" und "*/", und das wäre alles bis auf die Methode "methodB()". Es sollen aber zwei separate Treffer (einen für jeden Javadoc-Kommentar) gefunden werden.

Ich bräuchte also anstelle des von mir verwendeten "[\\w|\\W|\\s|\\S]" einen Ausdruck für "alles außer die Sequenz */".
Ich weiß wie man das mit Mengen anstellt (z.B. [^a-z]), aber für Sequenzen fällt mir hier leider keine Lösung ein....

Kann mir jemand weiterhelfen?


Gruß,


Alan


EDIT: Ich habe eine Lösung gefunden. Die arbeitet zwar nicht mit Negation, erfüllt den Zweck aber dennoch:

Indem man hinter "([\\w|\\W|\\s|\\S])*" ein "?" schreibt, findet der *-Quantifier nicht mehr den größt- sondern den kleinstmöglichen Treffer. Muss man auch wissen - man lernt nie aus :)
 
Zuletzt bearbeitet:

RySa

Bekanntes Mitglied
Nur mal als Info. Das "?" heißt nicht "finde den kleinst-möglichen Treffer" sondern, dass der Ausdruck nur einmal oder keinmal vorkommen darf, also nicht mehrmals. Das mag jetzt funktionieren, du solltest es aber vlt. noch gründlich Überprüfen bevor du es irgendwo produktiv einsetzt.

Gruß

Ps. Falls du doch feststellen solltest, dass es nicht so gut funktioniert, versuche vielleicht *? zu benutzen, also beide zusammen hintereinander
 

Alan47

Mitglied
Ps. Falls du doch feststellen solltest, dass es nicht so gut funktioniert, versuche vielleicht *? zu benutzen, also beide zusammen hintereinander


Genau das habe ich in meinem Edit vom ersten Post dann auch gemacht und es hat wunderbar funktioniert. Eventuell habe ich mich nicht klar genug ausgedrückt, aber im Endeffekt habe ich den * einfach durch *? ersetzt.

Gruß,


Alan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Regex-Regel um fehlende Schlusszeichen zu finden Softwareentwicklung 1
H Regex Frage Softwareentwicklung 2
C Regex Problem Softwareentwicklung 1
H [Java]Regex Hilfe Softwareentwicklung 3
TheJavaKid RegEx Problem Softwareentwicklung 2
P Nur ganze Worte ersetzen mit RegEx Softwareentwicklung 2
C Regex-Problem Softwareentwicklung 24
G RegEx Version number Softwareentwicklung 8
M Regex Ausnahmen/Bedingungen Softwareentwicklung 5
H [RegEx] Anführungszeichen finden Softwareentwicklung 2
B Regex-Problem mit replace außerhalb des matching bereichs liegender Zeichenketten Softwareentwicklung 2
ruutaiokwu regex, der mit nur html-comments, nicht aber javascript entfernt Softwareentwicklung 16
V RegEx um zu escapen? Softwareentwicklung 2
TiME-SPLiNTER Banales regEx-Problem Softwareentwicklung 2
B Regex, um Sätze zu erkennen Softwareentwicklung 3
A Verschachteln von REGEX Softwareentwicklung 4
D Regex zur auswertung von SQL Statements Softwareentwicklung 3
S Regex Frage Softwareentwicklung 4
S sonderzeichen mit regex abfragen Softwareentwicklung 2
N Wie testet ihr regex auf korrektheit? Softwareentwicklung 8
m@nu Problem mit einer RegEx Softwareentwicklung 4
S [RegEx] Dateigerecht geschriebene Namen parsen Softwareentwicklung 2
S Negation in regulären Ausdrücken Softwareentwicklung 24

Ähnliche Java Themen

Neue Themen


Oben