2017-08-17 6 views
1

Je ferais correspondre sur une chaîne les symboles "<", ">", "{", "}". J'utiliseSupports de chaînes de caractères Java

String text="<"; 
    System.out.println(text.matches("(\\W)*([{]|[}]|[<]|[>])")); 

    //output: false. 

et tout va bien, sauf le « < » qui nécessite un espace après afin d'être adapté. Toute suggestion? Merci

+1

Pourquoi ne pas agréger tous ces caractères dans la même classe de caractères comme ça? '' text.matches ("(\\ W) * ([{} <>])")) '' – f1sh

+0

Vous pouvez faire quelque chose comme ceci '\ {' au lieu de '[{]' pour correspondre à un seul caractère; comme 'text.matches (" (\\ W) * (\ {| \} | \ <|\>) ")'; mais cela ne répondra pas à votre question. Que voulez-vous dire par «exige un espace après»? Cela correspond seulement '>' et pas '>'? – NatNgs

+0

Il correspond seulement à "<" (notez l'espace) mais pas à "<". – Discipulos

Répondre

1

Je crois que cette regex devrait résoudre votre problème. J'ai nettoyé le code un peu et ajouté un lookahead positif < assurant qu'il y a un espace après le <. Si vous n'avez pas utilisé de lookaheads, je vous recommande de lire à leur sujet http://www.regular-expressions.info/lookaround.html.

Regex: "(\\W)*([{>}]|\\<(?=))"

+0

Il donne une exception régulière non valide. – Discipulos

+0

Je l'ai vérifié dans PCGE regex. Je ne sais pas pourquoi cela échouerait dans java regex. Je vais regarder dedans. –

+0

Mon regex a été restructuré à cause de certaines différences de Java. Ils ont interprété les caractères spéciaux différemment. J'ai testé maintenant comme une chaîne Java. –

0

Le problème est en dehors du code affiché. Merci à tous.