Maison  >  Article  >  Java  >  Java utilise des expressions régulières pour implémenter l'analyse des opérations de jugement d'heure et de date

Java utilise des expressions régulières pour implémenter l'analyse des opérations de jugement d'heure et de date

黄舟
黄舟original
2017-10-12 10:27:051820parcourir

Cet article présente principalement les opérations de jugement courantes de l'heure et de la date en Java basées sur des expressions régulières. Il explique brièvement la signification des métacaractères communs dans les expressions régulières et analyse le jugement des formats de date et d'heure courants en Java basé sur les expressions régulières. sous forme d'exemples. Pour les compétences opérationnelles, les amis dans le besoin peuvent se référer à

Cet article décrit les opérations de jugement courantes de l'heure et de la date basées sur les expressions régulières Java. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Récemment, j'ai besoin de compléter une entreprise qui détermine le type d'heure et de date saisi par l'utilisateur pour effectuer les opérations correspondantes. Naturellement, les expressions régulières sont indispensables pour réaliser cette fonction. Si vous améliorez les expressions régulières, son utilisation est en fait très simple. Il vous suffit de mémoriser ce formulaire et de l'exécuter de manière flexible.

+ Correspond à la sous-expression précédente zéro ou une fois. Par exemple, « do(es) ? » " dans "fait". ? équivaut à {0,1}. 🎜>{n}n est un entier non négatif qui correspond à un certain nombre de fois. Par exemple , "o{2}" ne peut pas correspondre au "o" dans "Bob", cependant. Peut correspondre à deux o dans "food". entier négatif. Par exemple, "o{. 2,}" ne peut pas correspondre au "o" dans "Bob", mais il peut correspondre à tous les o dans "foooood". "o{1,}" est équivalent à "o+". "o{0,}" est équivalent à "o*". ;=m correspond au moins n fois. Par exemple, "o{1,3}" correspondra aux trois premiers o de "fooooood". . Notez la virgule et les deux chiffres Il ne peut y avoir d'espaces entre ? lorsque ce caractère est suivi d'un autre limiteur (*,+,?, {n},{n, }, {n,m}), le mode de correspondance est non gourmand. Le mode non gourmand correspond le moins possible à la chaîne recherchée, tandis que le mode gourmand par défaut correspond à la plus grande partie de la chaîne recherchée. chaîne autant que possible. Par exemple, pour la chaîne "oooo", "o?" correspondra à un seul "o", tandis que "o+" correspondra à tous les "o" . . Les points correspondent. N'importe quel caractère sauf "n". Pour faire correspondre n'importe quel caractère incluant "n", utilisez un modèle comme "[sS]"(motif)<.> Faites correspondre le modèle et obtenez cette correspondance. La correspondance obtenue peut être obtenue à partir de la collection Matches générée, en utilisant la collection SubMatches dans VBScript et l'attribut $0...$9 dans JScript. Pour faire correspondre les caractères entre parenthèses, utilisez "(" ou ")". (?:pattern) correspond au modèle mais n'obtient pas le résultat correspondant, ce qui signifie qu'il s'agit d'une correspondance non obtenue et n'est pas stockée pour une utilisation ultérieure. Ceci est utile lors de la combinaison de parties d'un motif à l'aide du caractère ou "(|)". Par exemple, « industr(?:y|ies) » est une expression plus simple que « industry|industries ». (?=motif) Recherche positive positive, correspondant à la chaîne de recherche au début de tout modèle de correspondance de chaîne. Il s'agit d'une correspondance sans récupération, c'est-à-dire qu'il n'est pas nécessaire de récupérer la correspondance pour une utilisation ultérieure. Par exemple, « Windows(?=95|98|NT|2000) » peut correspondre à « Windows » dans « Windows2000 », mais ne peut pas correspondre à « Windows » dans « Windows3.1 ». La prélecture ne consomme pas de caractères, c'est-à-dire qu'après une correspondance, la recherche de la correspondance suivante commence immédiatement après la dernière correspondance, plutôt qu'après le caractère contenant la prélecture. (?!modèle)Recherche négative directe, faisant correspondre la chaîne de recherche au début de toute chaîne qui ne correspond pas au modèle. Il s'agit d'une correspondance sans récupération, c'est-à-dire qu'il n'est pas nécessaire de récupérer la correspondance pour une utilisation ultérieure. Par exemple, « Windows(?!95|98|NT|2000) » peut correspondre à « Windows » dans « Windows3.1 », mais ne peut pas correspondre à « Windows » dans « Windows2000 ». (?<=motif)La pré-vérification positive inversée est similaire à la pré-vérification positive avant, mais dans la direction opposée. Par exemple, "(?<=95|98|NT|2000)Windows" peut correspondre à "Windows" dans "2000Windows", mais ne peut pas correspondre à "Windows" dans "3.1Windows". (?Inverser la pré-vérification négative, similaire à la pré-vérification négative avant, sauf dans le sens opposé. Par exemple, "(?x|y correspond à x ou y Par exemple, "z|food" peut correspondre à "z" ou "food correspond à "zood". ou "nourriture". <.> [^a-z]Plage de caractères négative. Correspond à tout caractère ne se trouvant pas dans la plage spécifiée. Par exemple, "[^a-z]" correspond à tout caractère qui n'est pas compris entre "a" et "z". b correspond à une limite de mot, qui fait référence à la position entre un mot et un espace. Par exemple, « erb » peut correspondre au « er » dans « never » mais pas au « er » dans « verb ». B correspond aux limites autres que les mots. "erB" correspond au "er" dans "verb", mais pas au "er" dans "jamais". cx correspond au caractère de contrôle spécifié par x. Par exemple, cM correspond à un caractère Control-M ou à un retour chariot. La valeur de x doit être A-Z ou a-z. Sinon, traitez c comme un caractère « c » littéral. d correspond à un caractère numérique. Équivalent à [0-9]. D correspond à un caractère non numérique. Équivalent à [^0-9]. f correspond à un saut de formulaire. Équivalent à x0c et cL. n correspond à un caractère de nouvelle ligne. Équivalent à x0a et cJ. r correspond à un caractère de retour chariot. Équivalent à x0d et cM. s correspond à n'importe quel caractère d'espacement, y compris les espaces, les tabulations, les sauts de formulaire, etc. Équivalent à [fnrtv]. S correspond à tout caractère autre qu'un espace. Équivalent à [^ fnrtv]. t correspond à un caractère de tabulation. Équivalent à x09 et cI. v correspond à un caractère de tabulation verticale. Équivalent à x0b et cK. w correspond à n'importe quel caractère de mot, y compris un trait de soulignement. Équivalent à "[A-Za-z0-9_]". W correspond à n'importe quel caractère autre qu'un mot. Équivalent à "[^A-Za-z0-9_]". xn correspond à n, où n est la valeur d'échappement hexadécimale. La valeur d’échappement hexadécimale doit comporter exactement deux chiffres. Par exemple, « x41 » correspond à « A ». "x041" équivaut à "x04&1". Le codage ASCII peut être utilisé dans les expressions régulières. num correspond à num, où num est un entier positif. Une référence au match obtenu. Par exemple, "(.)1" correspond à deux caractères identiques consécutifs. n identifie une valeur d'échappement octale ou une référence arrière. n est une référence vers l'arrière si n est précédé d'au moins n sous-expressions récupérées. Sinon, si n est un nombre octal (0-7), alors n est une valeur d'échappement octale. nmIdentifie une valeur d'échappement octale ou une référence arrière. Si nm est précédé d'au moins nm get sous-expressions, nm est une référence vers l'arrière. Si nm est précédé d'au moins n, alors n est une référence vers l'arrière suivie du littéral m. Si aucune des conditions précédentes n'est remplie et si n et m sont tous deux des nombres octaux (0-7), nm correspondra à la valeur d'échappement octale nm. nmlSi n est un nombre octal (0-7) et que m et l sont tous deux des nombres octaux (0-7), faites correspondre la valeur d'échappement octale nml. un correspond à n, où n est un caractère Unicode représenté sous forme de quatre chiffres hexadécimaux. Par exemple, u00A9 correspond au symbole de droit d'auteur (©).

那么利用上面的规则就可以完成日期时间类型的判断。下面的代码可以完成这样功能。


public static boolean isDateTime(String datetime){
  Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1][0-9])|([2][0-4]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
  return p.matcher(datetime).matches();
}

通过上面的代码我们可以判断日期时间类型,而且它还可以判断纯日期类型,支持的格式为“YYYY-MM-DD HH:mm:ss”和“YYYY-MM-DD”。

当然如果是仅仅判断“YYYY-MM-DD”类型的话,就用下面的代码:


public static boolean isDate(String date){
  Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");
  return p.matcher(date).matches();
}

那么我们如果是要判断“HH:mm:ss”类型就需要用下面的代码来完成对这样的类型的判断。

代码如下:


public static boolean isTime(String time){
  Pattern p = Pattern.compile("((((0?[0-9])|([1][0-9])|([2][0-4]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
  return p.matcher(time).matches();
}

有了上面的三个代码,就可以完成对日期和时间的判断了。

Métacaractères Description
Marquer le caractère suivant comme un caractère spécial ou un littéral caractère, ou une référence arrière, ou un caractère d'échappement octal. Par exemple, « n » correspond au caractère « n ». "\n" correspond à un caractère de nouvelle ligne. La séquence "\" correspond à "" et "(" correspond à "(".
^ correspond au début de la chaîne d'entrée. Si l'objet RegExp est défini Attribut multiligne, ^ correspond également à la position après "n" ou "r"
$ correspond à la position de fin de la chaîne d'entrée s'il est défini. correspond également à la position avant "n" ou "r".
* correspond à la sous-expression précédente zéro ou plusieurs fois zo* peut correspondre à "z" et ". zoo". *Équivalent à {0,}
correspond à la sous-expression précédente une ou plusieurs fois. . Par exemple, "zo+" peut correspondre à "zo", mais pas à "z". . + est équivalent à {1,} ?
[xyz] jeu de caractères. Correspond à l'un des caractères contenus. Par exemple, « [abc] » correspondrait au « a » dans « plain ».
[^xyz] Un ensemble de caractères de valeur négative. Correspond à n’importe quel caractère non inclus. Par exemple, "[^abc]" correspondrait à "plin" dans "plain".
[a-z] plage de caractères. Correspond à n’importe quel caractère dans la plage spécifiée. Par exemple, "[a-z]" correspond à n'importe quel caractère alphabétique minuscule compris entre "a" et "z".
Remarque : Ce n'est que lorsque le trait d'union se trouve à l'intérieur du groupe de caractères et entre deux caractères qu'il peut représenter la plage de caractères ; s'il apparaît au début du groupe de caractères, il ne peut représenter que le trait d'union lui-même

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn