2011-05-11 4 views
0

Comment valider une expression pour un caractère de point unique? Par exemple, si j'ai une expression "trjb....fsf..ib.bi." alors il devrait revenir seulement des points à l'index 15 et 18. Si j'utilise Motif p=Pattern.compile("(\\.)+");-je obtenirexpressions régulières en java

4 .... 
11 .. 
15 . 
18 . 

Répondre

2

Cela semble faire l'affaire:

String input = "trjb....fsf..ib.bi."; 
Pattern pattern = Pattern.compile("[^\\.]\\.([^\\.]|$)"); 
Matcher matcher = pattern.matcher(" " + input); 
while (matcher.find()) { 
    System.out.println(matcher.start()); 
} 

L'espace supplémentaire devant l'entrée fait deux choses:

  1. Permet de . à détecter en tant que premier caractère de la chaîne d'entrée
  2. Compense le matcher.start() par un pour rendre compte du caractère devant la apparié .

Le résultat est:

15 
18 
+0

Merci WhiteFang.Il a travaillé – raj

0

Essayez

Pattern.compile("(?<=[^\\.])\\.(?=[^\\.])")

ou encore mieux .. .

Pattern.compile("(?<![\\.])\\.(?![\\.])")

Il utilise negative lookaround.

(?<![\\.]) =>pas précédée par un .

\\. => un .

(?![\\.]) =>pas suivi d'un .

2

ajouter un blanc au début et à la fin de la chaîne et ensuite utiliser le modèle

"[^\\.]\\.[^\\.]" 
+0

Et ajouter un espace à la fin aussi ... :) –

1

vous devez utiliser des réponses négatives.

Quelque chose comme Pattern.compile("(?<!\\.)\\.(?!\\.)");

+0

Amal, pourrait u pl expliquer la pattern.Je n'obtiens pas l'utilisation de raj

+0

l'expression correspond à un '.' caractère non précédé d'un '.' et non suivi d'un '.'. Référez-vous à [http://www.regular-expressions.info/lookaround.html](http://www.regular-expressions.info/lookaround.html) – amal