Wie Sie in Java RegEx den Unterschied zwischen .
(Punkt) dem Metazeichen und dem normalen Punkt herausfinden, wie wir ihn in einem Satz verwenden. Wie für andere Metazeichen diese Art von Situation zu handhaben zu wie ( *
, +
, \d
, ...)
150
Von den anderen Mitgliedern vorgeschlagene Lösungen funktionieren bei mir nicht.
Aber ich fand das:
Um einem Punkt in Java Regexp zu entkommen, schreiben Sie
[.]
quelle
\\.
hat bei mir nicht funktioniert: Ich habe mich\.
beschwert, dass.
man nicht entkommen muss,\\.
und dachte, es sei\.
stattdessen.
,\\\.
und der Bauherr hat einen Fehler geworfen,[.]
war das einzige, was funktioniert hat.\\.
in einem String-Literal finden Sie\.
, was der reguläre Ausdruck benötigt, um den Punkt als Literalpunkt anstelle des Matchers für beliebige Zeichen zu sehen.Reguläre Ausdrücke im Perl-Stil (auf denen die Java-Regex-Engine mehr oder weniger basiert) behandeln die folgenden Zeichen als Sonderzeichen:
.^$|*+?()[{\
außerhalb von Zeichenklassen eine besondere Bedeutung haben ,]^-\
haben innerhalb von Zeichenklassen ([...]
) eine besondere Bedeutung .Sie müssen diese (und nur diese) Symbole je nach Kontext umgehen (oder sie bei Zeichenklassen an Positionen platzieren, an denen sie nicht falsch interpretiert werden können).
Das unnötige Entkommen anderer Zeichen kann funktionieren, aber einige Regex-Engines behandeln dies als Syntaxfehler, was beispielsweise
\_
einen Fehler in .NET verursacht.Einige andere führen zu falschen Ergebnissen, werden beispielsweise in Perl
\<
als Literal interpretiert<
,egrep
bedeuten aber "Wortgrenze".So schreiben
-?\d+\.\d+\$
zu Spiel1.50$
,-2.00$
usw. und[(){}[\]]
für eine Zeichenklasse , die alle Arten von Klammern Spiele / Klammern / Klammern.Wenn Sie eine Benutzereingabezeichenfolge in eine Regex-sichere Form umwandeln müssen, verwenden Sie
java.util.regex.Pattern.quote
.Weiterführende Literatur: Jan Goyvaerts Blog RegexGuru über die Flucht vor Metazeichen
quelle
Entkomme Sonderzeichen mit einem Backslash.
\.
,\*
,\+
,\\d
, Und so weiter. Wenn Sie sich nicht sicher sind, können Sie sich jedem nicht alphabetischen Zeichen entziehen, unabhängig davon, ob es sich um ein besonderes Zeichen handelt oder nicht. Weitere Informationen finden Sie im javadoc für java.util.regex.Pattern .quelle
Hier ist Code, den Sie direkt kopieren und einfügen können:
Und was ist, wenn fälschlicherweise Leerzeichen vor oder nach "." in solchen Fällen? Es wird immer empfohlen, diese Bereiche ebenfalls zu berücksichtigen.
Hier ist \\ s * da, um die Leerzeichen zu berücksichtigen und Ihnen nur die erforderlichen geteilten Zeichenfolgen zu geben.
quelle
Ich wollte eine Zeichenfolge finden, die mit ". *" Endet. Dazu musste ich Folgendes verwenden:
Ein bisschen albern, wenn du darüber nachdenkst: D Hier ist, was es bedeutet. Am Anfang der Zeichenfolge kann ein beliebiges Zeichen null oder mehrmals stehen, gefolgt von einem Punkt "." gefolgt von einem Stern (*) am Ende der Zeichenfolge.
Ich hoffe, das ist nützlich für jemanden. Danke für den Backslash an Fabian.
quelle
"\\.\\*$"
Dann einfach benutzen . Es ist nicht erforderlich, den Anfang der Zeichenfolge abzugleichen, wenn es für Sie nicht wichtig ist.Wenn Sie beenden möchten, überprüfen Sie, ob Ihr Satz mit ". " Endet , und fügen Sie am Ende Ihres Musters [\. \ ] $ Hinzu.
quelle
Ich mache ein grundlegendes Array in JGrasp und habe festgestellt, dass mit einer Zugriffsmethode für ein char [] [] Array ('.') Ein einzelner Punkt platziert werden kann.
quelle