Regulärer Ausdruck, der vollständig qualifizierten Klassennamen entspricht
Was ist der beste Weg, um match voll qualifizierte Java-Klassenname in einem text?
Beispiele: java.lang.Reflect
java.util.ArrayList
org.hibernate.Hibernate
.
InformationsquelleAutor der Frage Chun ping Wang | 2011-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen vollständig qualifizierten Java-Klassennamen (sprich "N") hat die Struktur
Den "N" - Teil muss ein Java-Bezeichner sein. Java-Bezeichner dürfen nicht mit einer Zahl beginnen, aber nach dem ersten Zeichen können Sie eine beliebige Kombination von Buchstaben und Ziffern, Unterstriche oder Dollarzeichen:
Können Sie auch nicht ein reserviertes Wort (wie
import
true
odernull
). Wenn Sie überprüfen möchten Plausibilität nur, das oben genannte ist genug. Wenn Sie auch prüfen wollen Gültigkeitmüssen Sie die Prüfung gegen eine Liste der reservierten Wörter als gut.Java-Bezeichner enthalten können alle Unicode-Zeichen statt des "Latein-nur". Wenn Sie überprüfen möchten, verwenden Sie die Unicode-Zeichenklassen:
oder, für kurze
Den Java Language Specification, (Abschnitt 3.8) hat alle details über gültige Bezeichner-Namen.
Siehe auch die Antwort auf diese Frage: Java-Unicode-variable Namen
InformationsquelleAutor der Antwort Tomalak
Hier eine voll funktionierende Klasse mit tests, basierend auf den hervorragenden Kommentar von @alan-moore
InformationsquelleAutor der Antwort Renaud
Dem angegebenen Muster von Renaud arbeitet. Aber, soweit ich das beurteilen kann, wird es immer backtrack am Ende.
Zu optimieren, können Sie im wesentlichen vertauschen der ersten Hälfte mit der letzten. Beachten Sie den Punkt überein, dass Sie müssen auch zu ändern.
Folgende ist meine version von ihm, dass, wenn im Vergleich zum original, läuft ca. doppelt so schnell:
Kann ich keine Kommentare schreiben, also beschloss ich, schreiben Sie eine Antwort statt.
InformationsquelleAutor der Antwort Jörgen Lundgren
Kam ich (auf meinem eigenen) zu einer ähnlichen Antwort (als Tomalak ' s Antwort), so etwas M. M. M. N:
Wo
Aber dieser reguläre Ausdruck (im Gegensatz Tomalak Antwort) macht weitere Annahmen:
Den Paket-Namen (M-Teil) wird nur in Kleinbuchstaben geschrieben, das erste Zeichen von M wird immer eine untere Brief, der rest mischen können, Unterstrich, lower Buchstaben und zahlen.
Den Namen der Klasse (N-Teil) beginnen immer mit einem Großbuchstaben oder einem Unterstrich, der rest mischen können, Unterstriche, Buchstaben und zahlen. Innere Klassen beginnen immer mit einem dollar-symbol ($) und gehorchen müssen den Namen der Klasse Regeln, die zuvor beschrieben.
Hinweis: das Muster \w ist die XSD-Muster für Buchstaben und Ziffern (es sind nicht einbegriffen die Unterstrich-symbol (_))
Hoffe, dass dies helfen.
InformationsquelleAutor der Antwort Carlitos Way
Folgenden Ausdruck funktioniert für mich vollkommen in Ordnung.
InformationsquelleAutor der Antwort gopalanrc
Die folgende Klasse wird überprüft, ob eine zur Verfügung gestellte package-name ist gültig:
InformationsquelleAutor der Antwort David Lev
kürzeren version eine funktionierende regexp:
InformationsquelleAutor der Antwort Diego Plentz
Werde ich etwas sagen wie
([\w]+\.)*[\w]+
Aber vielleicht kann ich genauer wissen, was Sie wollen zu tun 😉
InformationsquelleAutor der Antwort krtek