Um die \
, folloed mit x
, gefolgt mit 2 Hex-Zeichen, überall in der Zeichenfolge übereinstimmen, Sie
\\x[0-9A-Fa-f]{2}
Siehe regex demo
Um sie alle nicht-überlappende entsprechen zu zwingen verwenden müssen Vorkommen, verwenden Sie die spezifischen Modifikatoren (wie /g
in JavaScript/Perl) oder bestimmte Funktionen in Ihrer Programmiersprache (Regex.Matches
in .NET oder preg_match_all
in PHP, etc.).
Die ^(?:\\x[0-9A-Fa-f]{2})+$
Regex validiert eine ganze Zeichenfolge, die aus den oben genannten Mustern besteht. Es passiert aufgrund der ^
(Anfang der Zeichenfolge) und $
(Ende der Zeichenfolge) Anker. Beachten Sie, dass die (?:...)+
eine nicht erfassende Gruppe ist, die in der Zeichenkette 1 oder mehrmals (aufgrund +
Quantifizierer) wiederholen kann.
Einige Java demo:
String s = "\\x12\\x13\\x14\\x00\\xff\\xff";
// Extract valid blocks
Pattern pattern = Pattern.compile("\\\\x[0-9A-Fa-f]{2}");
Matcher matcher = pattern.matcher(s);
List<String> res = new ArrayList<>();
while (matcher.find()){
res.add(matcher.group(0));
}
System.out.println(res); // => [\x12, \x13, \x14, \x00, \xff, \xff]
// Check if a string consists of valid "blocks" only
boolean isValid = s.matches("(?i)(?:\\\\x[a-f0-9]{2})+");
System.out.println(isValid); // => true
Bitte beachte, dass wir [a-zA-Z]
zu [a-z]
verkürzen können, wenn wir einen Fall unempfindlich Modifikator (?i)
zu Beginn des Musters hinzufügen, oder einfach nur \p{Alnum}
verwenden, die in einer Java regex beliebige alphanumerische Zeichen Spiele .
Die String#matches
Methode immer die Regex standardmäßig verankert, wir brauchen den führenden ^
und Hinter nicht $
Anker, wenn das Muster im Innern verwenden.
Meinen Sie, Sie müssen eine Zeichenfolge validieren, die nur aus diesen Blöcken besteht? Wie ['^ (?: \\ x [0-9A-Fa-f] {2}) + $'] (https://regex101.com/r/ZUIoqF/3)? Oder müssen Sie diese Blöcke in einer längeren Zeichenfolge abgleichen (['\\ x [0-9A-Fa-f] {2}'] (https://regex101.com/r/8pFM79/1))? –
Edit: Ihre zweite Regex funktioniert, können Sie mir erklären, warum es die gesamte Zeichenfolge überprüft, anstatt es nach dem ersten "Finden", wie die erste Regex Sie gebucht gestoppt? –