Java regex problème avec caratère @
Fermé
vert
-
Modifié par vert le 9/12/2010 à 09:34
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 10 déc. 2010 à 18:25
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 10 déc. 2010 à 18:25
A voir également:
- Java regex problème avec caratère @
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
4 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 9/12/2010 à 12:30
Modifié par KX le 9/12/2010 à 12:30
Comment fais-tu ton code ?
Moi je n'ai pas de problème particulier en utilisant un @ avec regex :
La confiance n'exclut pas le contrôle
Moi je n'ai pas de problème particulier en utilisant un @ avec regex :
import java.util.regex.Pattern; static String remplacerFinMots(String phrase, String finAvant,String finApres) { return Pattern.compile(finAvant+"(?=\\W)") .matcher(phrase) .replaceAll(finApres); } public static void main(String args[]) { System.out.println(remplacerFinMots("M@ phr@se de test.", "@", "a")); // "M@ phr@se de test." -> "Ma phr@se de test." }
La confiance n'exclut pas le contrôle
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
10 déc. 2010 à 18:08
10 déc. 2010 à 18:08
'@(?=\W|\Z)'
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
10 déc. 2010 à 18:18
10 déc. 2010 à 18:18
En effet, ça marche avec le |
compile("(?=\\b)@(?=\\W|\\Z)")
Utilisateur anonyme
Modifié par danimo le 9/12/2010 à 21:21
Modifié par danimo le 9/12/2010 à 21:21
Salut,
On peut faire tout simplement:
Mais si tu dois (ou si tu veux) utiliser regex:
Cordialement,
Dan
On peut faire tout simplement:
String phrase = "M@ phr@se de test."; phrase = phrase.replaceAll("@", "a"); System.out.println("\nphrase : " + phrase);
Mais si tu dois (ou si tu veux) utiliser regex:
String phrase = "M@ phr@se de test."; // compilation de la regex avec le motif : "@" Pattern p = Pattern.compile("@"); // création du moteur associé à la regex sur la chaîne "M@ phr@se de test." Matcher m = p.matcher(phrase); // remplacement de toutes les occurrences de "@" par "a" phrase = m.replaceAll("a"); System.out.println("\nphrase : " + phrase);
Cordialement,
Dan
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 9/12/2010 à 21:26
Modifié par KX le 9/12/2010 à 21:26
Le problème avec tes codes Dan, c'est que "M@ phr@se de test." sera remplacé par "Ma phrase de test." alors que seuls les @ en fin de mots doivent être modifiés pour obtenir "Ma phr@se de test."
Remarque, on peut, comme je l'ai fait, coller toutes les instructions en une seule plutôt que créer des objets intermédiaires lorsque ceux-ci ne sont plus utilisés par la suite...
Remarque, on peut, comme je l'ai fait, coller toutes les instructions en une seule plutôt que créer des objets intermédiaires lorsque ceux-ci ne sont plus utilisés par la suite...
String ... = Pattern.compile(...).matcher(...).replaceAll(...);
En faite \b@ ne fonctionne pas, c'est @ n'est pas une "lettre" selon regex (Je l'ai appris sur un autre site). KX ton code fonctionne tant que le @ n'est pas à la fin de la chaine de caratère ...
Merci
Merci
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
10 déc. 2010 à 10:15
10 déc. 2010 à 10:15
Après, il est toujours possible d'affiner l'expression régulière...
Je n'ai pas testé, mais avec la fin de la chaîne de caractère on aurait peut-être :
Je n'ai pas testé, mais avec la fin de la chaîne de caractère on aurait peut-être :
compile(finAvant+"(?=[\\W$])")
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
10 déc. 2010 à 13:22
10 déc. 2010 à 13:22
En fait, avec $, on teste si @ est à la fin d'une ligne (avant un \n).
Pour tester si c'est la fin de la chaîne de caractères, ça devrait être \z ou \Z mais ça me génère une exception, donc je n'ai pas de solution pour ce cas là (sauf rajouter \n à la fin)
Par contre il pourrait être intéressant de rajouter le \b avant @ pour ne pas prendre en compte un @ isolé... Mais après tout dépend ce que tu veux faire, il faut regarder ce qui existe et tester.
Pour tester si c'est la fin de la chaîne de caractères, ça devrait être \z ou \Z mais ça me génère une exception, donc je n'ai pas de solution pour ce cas là (sauf rajouter \n à la fin)
Par contre il pourrait être intéressant de rajouter le \b avant @ pour ne pas prendre en compte un @ isolé... Mais après tout dépend ce que tu veux faire, il faut regarder ce qui existe et tester.
compile("(?=\\b)@(?=[\\W$])")
Modifié par heyquem le 10/12/2010 à 18:33
Bien sûr je le savais mais c'était un peu effacé de ma mémoire et j'ai mis deux minutes à ce que ça me revienne.
Je dis aussi ça pour souligner cette pratique. En ignorant à quoi servent certaines aptitudes des regex, on sous-exploite leur immenses possibilités.