Ich versuche, Datenzeilen mit dem folgenden Muster zu analysieren: < /p>
1337; Gruppe; Variable; 13.37; key = value Nummer?; Name?; Name?; Value; (key = value)*.
Der Trennzeichen kann auf eine Zeichenfolge gesetzt werden. Wenn es beispielsweise auf foo < /code> festgelegt wird, wird diese Datenzeile als gültig angesehen: < /p>
1337FoogroupFoOvariableFoo13.37Fookey = Wert < /p>
< /blockmoty. gültig: < /p>
fooooooooOo13.37 < /p>
< /blockquote>
Ich habe den folgenden Testcode ausprobiert: < /p>
private static final String BASE_PAYLOAD_DATA = "\\s*(\\d*SEPNOTSEP*SEPNOTSEP*SEPNOTSEP+(?:SEPNOTSEP*=NOTSEP*)*)\\s*$";
public static void main(String[] args) {
String line = "1337;GROUP;VARIABLE;13.37;key=value";
String separator = ";";
String processed = StringUtils.replace(BASE_PAYLOAD_DATA, "NOTSEP", "(?!" + separator + ")");
processed = StringUtils.replace(processed, "SEP", "(?:" + separator + ")");
System.out.println(processed);
Pattern payloadData = Pattern.compile(processed);
System.out.println(payloadData.matcher(line).matches());
}
< /code>
Aber die getestete Zeile stimmt nicht überein. Die SEP < /code> und nichtsep < /code> werden verwendet, um die Tatsache zu simulieren, dass das Separator konfiguriert werden kann.\s*(\d*(?:;)(?!;)*(?:;)(?!;)*(?:;)(?!;)+(?:(?:;)(?!;)*=(?!;)*)*)\s*$
false
< /code>
Ich habe das Muster doppelt und dreifach überprüft, aber ich kann nicht auf das fehlerhafte Element hinweisen, und ich fürchte, ich fehlt vielleicht etwas, das viel zu offensichtlich ist. Regex -Muster? Es ist nicht in der Zählung zur Nummerierung der Backreferenzen enthalten. Wenn Sie die Übereinstimmung der Regex in einem Lookahead speichern möchten, müssen Sie in der Lookahead Klammern um die Regex einstellen, wie folgt: (? = (Regex)).>
Datenlinie nicht übereinstimmt Regex -Muster ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post