Wie verwenden von java-regex-match eine Zeile
Den raw-Daten:
auser1 home1b
auser2 home2b
auser3 home3b
Möchte ich mit einer Zeile, aber es funktioniert nicht mit ^(.*?)$
Allerdings kann ich verwenden a(.*?)b
passend user1 home1
.
Wie kann ich mit auser1 home1b
Zeigen Sie die Codezeile, die Sie verwenden: die
Warum kann man nicht aufteilen auf neue-Linien?
^(.*?)$
Ausdruck sollte funktionieren.Warum kann man nicht aufteilen auf neue-Linien?
InformationsquelleAutor performanceuser | 2011-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig
^
und$
entsprechen die start - und end-of-input-bzw. Sie müssen zum aktivieren von MULTI-LINE-Modus mit(?m)
, die Ursachen^
und$
entsprechen die start - und end-of-line:Demo:
erzeugt die folgende Ausgabe:
EDIT ICH
Die Tatsache, dass
^.*$
passte nicht alles ist, weil die.
standardmäßig nicht mit\r
und\n
. Wenn Sie aktivieren DOT-ALLE mit(?s)
, wodurch die.
zu entsprechen, als auch diejenigen, die Sie werden sehen, die gesamte Eingabezeichenfolge abgestimmt:EDIT II
In diesem Fall merken Sie, wie gut fallen die
^
und$
und suchen Sie einfach nach dem Muster.*
. Da.
nicht mit\n
Sie werden am Ende mit demselben übereinstimmt, wenn man für(?m)^.*$
wie @Kobi zu Recht erwähnt in den Kommentaren.Eine andere hinterhältige option ist passend für
.*
.Beachten Sie auch, dass MULTI-LINE-Modus
(?m)
, die auf die^
und$
Anker, unabhängig von SINGLE-LINE-Modus(?s)
, die auf die.
Betreiber. Kann man sinnvoll kombinieren, MULTI-LINE-und SINGLE-LINE Modus, aber das ist nicht das, was Sie hier wollen.wahr. 🙂
Ich finde die docs sind nicht allzu deutlich. Sie sind nur start - und end-of-line-chars, wenn der multi-Zeile-Modus aktiviert ist (was standardmäßig nicht). Also einfach sagen, Sie sind start - und end-of-line-chars ist IMHO irreführend.
InformationsquelleAutor Bart Kiers
können wir auch die Flagge
MULTILINE
,Damit wird die multiline-Modus, die Sie gab das erwartete Ergebnis.
InformationsquelleAutor RAN_0915