J'ai cette très longue chaîne en java
200/23 / Ne7WoRK / 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18> a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36eb58b4a5308750e63e4690c4538ddc18> a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32c62c4b441906833563d32c62c4b441906833563d32c62c4b441906833563d32c62c4f3
Ce que je veux, c'est obtenir:
Enchère: 200
Nom d'utilisateur: Ne7WoRK
Signature: 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a03cf331c564715f
J'ai besoin de 3 expressions régulières qui m'aideront à obtenir des chaînes distinctes de la valeur de l'enchère, du nom d'utilisateur et de la signature. Je ne sais pas comment y parvenir. J'ai tenté de résoudre ce problème avec l'expression régulière suivante
\ b. * / \ b
Cependant, cette expression régulière correspond aux 3 sous-parties entières et en donne une sortie
200/23 / Ne7WoRK /
Je ne sais pas comment créer 3 expressions régulières différentes où:
4 Réponses :
Essayez ceci: (\d+)\/(?:.+)\/(.+)\/(.+)
Cela vous donnera 3 groupes contenant les 3 strings.
Le code Java pour cela serait:
Matcher matcher = Pattern.compile("(\d+)\/(?:.+)\/(.+)\/(.+)").matcher(yourString);
if (matcher.find()) {
String bid = matcher.group(1);
String username = matcher.group(2);
String signature = matcher.group(3);
} else {
// Malformed String
}
Vous devriez utiliser matcher.match () au lieu de matcher.find () , pour attraper plus de chaînes invalides.
vous pouvez le diviser
[200, 23, Ne7WoRK, 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e]
Résultat
String a = "200/23/Ne7WoRK/3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e";
System.out.println(Arrays.toString(a.split("/")));
Et ensuite faire un autre travail pour obtenir l'exigence souhaitée
Vous pouvez regrouper les expressions en utilisant () par exemple, vous auriez 3 regroupements.
^([\d]*)\/([\d]*)\/([a-zA-Z|0-9]*)
Vous pouvez diviser en faisant correspondre soit une barre oblique, plus de 1 chiffres et une barre oblique ou simplement une barre oblique en utilisant un alternance :
[200, Ne7WoRK, 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e]
Par exemple:
String regex = "/\\d+/|/"; String string = "200/23/Ne7WoRK/3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18>a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a>03cf334295615f981c47e"; System.out.println(Arrays.toString(string.split(regex)));
Résultat :
/\d+/|/
Vous ne devriez pas poser de questions sur les expressions régulières si vous ne savez pas encore si elles sont le meilleur outil pour le travail. Dans ce cas, ils ne le sont pas, car un simple
String.splitsuffit.