2009-05-14 5 views
4

J'utilise replaceAll() sur une chaîne pour remplacer toute lettre par "[deux lettres]". Donc xxxaxxx à xxx [ab] xxx. Je ne veux pas que ceux qui ont déjà été remplacés soient refaits (se tourne vers xxx [un [cb]] xxx) ...Java regex pour correspondre à "t" sauf quand il est "[t" ou "t]"

Un moyen facile de faire ceci serait d'exclure toutes les lettres qui sont traitées par un "[" ou suivi de "]". Quel est le Regex correct à utiliser?

remplacerAll (foofoofoo, "[ab]");

+1

Pour référence ultérieure, la modification de votre question, il se cogne à la première page. Il n'y a pas besoin d'ajouter une réponse pour le cogner. –

Répondre

7
s.replaceAll("(?<!\\[)t(?!\\])", "[ab]"); 

Ceux-ci sont respectivement une lookbehind négative et une préanalyse négative, deux exemples OS assertions de longueur nulle. Plus d'informations peuvent être trouvées dans Lookahead and Lookbehind Zero-Width Assertions.

Une chose qui précède exclut [t]. Je suppose que c'est ce que vous voulez mais sinon, vous devrez le modifier légèrement.

+1

La parenthèse fermante finale vous manque-t-elle? –

+0

ouais ... besoin d'un ")" après le dernier crochet de fermeture. Fonctionne parfaitement, merci! – cksubs

1

Vous pouvez utiliser un lookbehind négatif et préanalyse, comme ceci:

(?<!\[)t(?!=\]) 
Questions connexes