web-dev-qa-db-fra.com

Comprendre l'expression régulière en Java: split ("\ t") vs split ("\\ t") - quand fonctionnent-ils tous les deux et quand doivent-ils être utilisés

J'ai récemment compris que je n'utilisais pas correctement l'expression régulière dans mon code. Étant donné l'exemple d'une chaîne délimitée par des tabulations str, j'utilise str.split("\t"). Maintenant, je me rends compte que c'est faux et pour faire correspondre les onglets correctement, je devrais utiliser str.split("\\t").

Cependant, il m'arrive de tomber sur ce fait par pur hasard, alors que je cherchais des modèles d'expression régulière pour autre chose. Vous voyez, le code défectueux split("\t") a très bien fonctionné dans mon cas, et maintenant je ne comprends pas pourquoi cela fonctionne si c'est la mauvaise façon de déclarer une expression régulière pour correspondre au caractère de tabulation. D'où la question, pour bien comprendre comment le regex est géré en Java, au lieu de simplement copier le code dans Eclipse et ne pas vraiment se soucier de pourquoi cela fonctionne ...

De la même manière, je suis tombé sur un morceau de texte qui est non seulement délimité par des tabulations, mais également délimité par des virgules. Plus clairement, les listes délimitées par des tabulations que j'analyse incluent parfois des éléments "composés" qui ressemblent à: item1,item2,item3 Et je voudrais les analyser comme des éléments séparés, par souci de simplicité. Dans ce cas, l'expression d'expression rationnelle appropriée devrait être: line.split("[\\t,]"), ou je me trompe également ici ??

Merci d'avance,

31
posdef

Lors de l'utilisation de "\t", le séquence d'échappement\t est remplacé par Java avec le caractère U + 0009. Lorsque vous utilisez "\\t", la séquence d'échappement \\ dans \\t est remplacé par Java avec \, résultant en \t qui est ensuite interprété par l'analyseur expression régulière comme le caractère U + 0009.

Les deux notations seront donc interprétées correctement. C'est juste la question quand il est remplacé par le caractère correspondant.

41
Gumbo

\ est considéré comme un caractère d'échappement en Java, donc pour obtenir une expression rationnelle correcte, vous devez vous échapper \ avec \ et t pour indiquer l'onglet.

This tutorial will help more

0
Jaydeep Patel