La chaîne d'URL de Hatena Blog a un format tel que "entrée / année / mois / jour / heure" (l'exemple d'URL n'est pas valide).
https://hogefugapiyo.hatenablog.com/entry/2019/09/02/000000
Cette fois, à titre d'exemple, nous allons supprimer l'année, le mois et le jour de cette URL.
Utilisez java.util.regex.Matcher
.
Matcher matcher = Pattern
.compile(".+/entry/(\\d+)/(\\d+)/(\\d+)/.+")
.matcher(/*Chaîne d'URL à comparer*/);
int year = Integer.parseInt(matcher.replaceFirst("$1"));
int month = Integer.parseInt(matcher.replaceFirst("$2"));
int day = Integer.parseInt(matcher.replaceFirst("$3"));
Bien qu'il ait été exprimé sous forme de découpage dans le titre, ce processus vise à l'origine à "si l'entrée correspond à l'expression régulière, remplacer la partie correspondante par l'expression régulière spécifiée". Dans ce cas, toute la chaîne de caractères de l'URL cible de la comparaison correspond à l'expression régulière, de sorte que la chaîne de caractères entière est remplacée par le contenu spécifié et, par conséquent, il semble qu'elle a été coupée.
Qu'est-ce que "$ 1"? C'est le contenu entre "()" dans l'expression régulière. Dans une expression régulière, cela peut être traité comme une variable.
Si vous ignorez l'essence, remplacez . + / Entry / (\\ d +) / (\\ d +) / (\\ d +) /. +
Avec . + / Entry / $ 1 / $ 2 / $ 3 /. +
Je pense que c'est facile à comprendre.
Puisqu'il s'agit d'un processus pour une chaîne de caractères, le résultat de la découpe sera naturellement renvoyé sous forme de chaîne de caractères.
Le même traitement peut être effectué en écrivant comme suit, mais si vous le faites plusieurs fois, il est plus efficace de compiler`` Pattern
en premier.
String year = /*Chaîne d'URL à comparer*/.replaceFirst(".+/entry/(\\d+)/(\\d+)/(\\d+)/.+", "$1");
Vous pouvez améliorer l'expression régulière en la déboguant sur le site suivant (cependant, il existe des différences entre les langues, vous devez donc également faire un test unitaire).
Recommended Posts