Java regex für ein beliebiges symbol?
Gibt es eine regex die akzeptiert, dass jedes symbol?
EDIT: um Zu verdeutlichen, was ich Suche.. ich will bauen, eine regex, die akzeptiert eine BELIEBIGE Anzahl von Leerzeichen und die es enthalten muss, mindestens 1 symbol (e.g , . "' $ £ etc.) oder (nicht exklusives oder) mindestens 1 Zeichen.
Bitte definieren Sie "Symbol" - es ist kein char, einschließlich Leerzeichen? Oder irgendetwas aber Leerzeichen...
Siehe meine Antwort: Sie sind auch Dinge, die Java hat Probleme mit, weil Sie in seiner nativen Zeichensatz anstelle des legacy-Zeichensatz. Wenn Sie zu viel zu tun mit diesen:
Ähm, korrigiert mich wenn ich falsch Liege, aber alle diese Zeichen sind in der
Ich fürchte, dass die gewählte Antwort falsch ist. Ich kann es nicht auf einfachen Daten sehr einfach. 🙁
In Java — aber nicht im Perl — Muster
Siehe meine Antwort: Sie sind auch Dinge, die Java hat Probleme mit, weil Sie in seiner nativen Zeichensatz anstelle des legacy-Zeichensatz. Wenn Sie zu viel zu tun mit diesen:
!"#$%&'()*+,-./:;<=>?@[\]^_ˋ{|}~¡¢£¤¥¦§¨©«¬®¯°±´¶·¸»¿×÷˂˃˄˅˘˙˚˜˝϶҂՚׀׃׆׳״‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‹›‼‽‾‿⁀
dann müssen Sie meine eleganteren Formulierungen.Ähm, korrigiert mich wenn ich falsch Liege, aber alle diese Zeichen sind in der
\S
Klasse, nicht?Ich fürchte, dass die gewählte Antwort falsch ist. Ich kann es nicht auf einfachen Daten sehr einfach. 🙁
In Java — aber nicht im Perl — Muster
^\s*\S+$
"erfolgreich" gegen "\t\n "
. Ich finde, dass, im Gegensatz zum Punkt, falsch: natürlich sollte es fehlschlagen, nicht gelingen. Nichts aber die Kasuistik einer Sprache-Anwalt bezahlt, von dem Reich des Bösen, könnte jeder machen, etwas anderes zu glauben. Es ist einfach nuts!InformationsquelleAutor Skizit | 2010-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Der Punkt (
.
) passen jedes symbol, zumindest, wenn man es in Verbindung mit- Muster.DOTALL
Flagge (weil es sonst nicht mit neue-Zeile-Zeichen). Aus den docs:Bezüglich deines edit:
Hier ist ein Vorschlag:
\s*
eine beliebige Anzahl von whitespace-Zeichen\S+
eine oder mehrere ("mindestens eins") nicht-whitespace-Zeichen.Aktualisiert :-)....
Richtig, so ein regex akzeptieren würde, strings enthalten eine beliebige Anzahl von Leerzeichen und MINDESTENS 1 Wort und eine beliebige Anzahl von Symbolen wäre...
\\s*\\p{Alnum}[\\p{Alnum}\\s]*
... wo kommt der Punkt hin?Streng genommen LF und CR werden die Kontroll-codes nicht Symbole, aber Sie sind immer noch richtig, dass
.
übereinstimmen, werden nicht alle möglichen Zeichen Wert.Sind wir nicht verwirrend "symbol" durch "Zeichen"? Ich interpretierte "symbol" in der Frage als "nicht-alphanumerische Zeichen".
InformationsquelleAutor aioobe
In Java, ein symbol ist
\pS
, das ist nicht das gleiche wie Satzzeichen, die\pP
.Ich über dieses Thema unterhalten, plus aufzählen der Arten für alle ASCII-Interpunktion und Symbole, hier in dieser Antwort.
Muster wie
[\p{Alnum}\s]
nur die Arbeit an legacy-dataset aus den 1960er Jahren. Um an Dingen zu arbeiten, die mit dem Java native Zeichen gesetzt, Sie muss etwas in der Größenordnung vonTut mir Leid, dass Java macht es so schwierig zu arbeiten mit modernen dataset, aber zumindest ist es möglich.
Fragt mich bloß nicht über die Grenzen oder grapheme Cluster. Für, die, siehe mein andere posting.
[\p{Alnum}\s]
nur die Arbeit an legacy-dataset aus den 1960er Jahren" -- Uhm, Nein, ich habe gesehen, wie Sie arbeiten, auf ein paar neuere sind auch...Nein, Sie nicht:
[\p{Alnum}\s]+$
schlägt fehl, selbst einfache Dinge wie£20
auf"this and that"
, und auf"the Molière exhibition"
. Herzlich willkommen auf Java! Sind wir noch Spaß?Gut,
\p{Alnum}
ist klar dokumentiert passend[a-zA-Z0-9]
, also ich würde nicht sagen, dass das Verhalten fehlerhaft ist. Teufel ich gewesen wäre, überrascht, wenn es übereinstimmung mit einer£
.Fein: hinzufügen
\p{Punct}
dann. Trotz Ihrer unaufrichtig, Köder&Schalter re Unicode,Java stecken in die Dark Ages of computing in den 1960er Jahren. Sie haben grundlegend falsch verstanden, die\b
und\w
sind und muss unweigerlich miteinander verknüpft. Von severing, die Verknüpfung, die Sie geschaffen haben asinine Catch-22s in Ihre Sprache verwirren, verwirren, und consternate jemand versuchen, Sie zu benutzen. Sie haben 3 Möglichkeiten: [1] Don ' T use Java regexes [2] Sorgfältig umschreiben alle Java-regexes von hand nach der Anleitung die ich hier habe und elsehwere dargelegt [3] Verwenden Sie mein alpha-code umgeschrieben jetzt -, beta-und Produktions-später.InformationsquelleAutor tchrist