2009-10-23 11 views
0

J'ai un problème.Regex avec texte délimité par des tabulations contenant x09

J'ai un texte délimité par des tabulations pour correspondre à une regex.

Mon regex ressemble:

^([\w ]+)\t(\d*)\t(\d+)\t([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\t]+)$ 

et un texte source exemple (onglets convertis en \ t pour plus de clarté):

JJ\t345\t0\tTest\tSome test text\tmore text: pcre:"/\x20\x62\x3b\x0a\x09\x61\x2e\x53\x74\x61\x72/"\tNone 

Cependant, le problème est que dans mon texte source, le 6ème champ contient une chaîne regex. Par conséquent, il peut contenir \ x09, ce qui fait naturellement exploser l'expression rationnelle puisqu'elle est également considérée comme un onglet.

Existe-t-il un moyen de dire au moteur de regex, "Match sur \ t mais pas sur le texte \ x09." Ma conjecture est non, car ils sont la même chose. Si ce n'est pas le cas, y a-t-il un caractère qui pourrait être utilisé en toute sécurité pour délimiter le texte contenant une chaîne regex?

+1

Toujours spécifier le moteur et la langue que vous utilisez. (même si je suppose que vous êtes sur PCre donné votre sortie d'échantillon) Les détails et les inconvénients Regexp varient beaucoup d'un moteur (et la langue) à l'autre. – ZJR

+0

Utilisation de la classe intégrée Pattern et Matcher dans Java 1.4.2 – wadesworld

Répondre

0

Je recommande d'encoder tous les caractères de la chaîne pcre avant d'exécuter l'expression régulière par rapport à elle.

+0

C'était une excellente solution au problème. – wadesworld

0

Cela ressemble à un problème avec le scénario de test. Une expression régulière peut contenir des onglets, mais pas votre exemple ci-dessus. Votre chaîne en Java ressemblerait à ceci:

String testString = "JJ\t345\t0\tTest\tSome test text\tmore text: pcre:"/\\x20\\x62\\x3b\\x0a\\x09\\x61\\x2e\\x53\\x74\\x61\\x72/"\tNone"; 

Si vous regardez cette chaîne dans le débogueur, vous aurez \ x09 en 4 caractères au lieu de 1 comme (l'onglet).

Questions connexes