Comment utiliser Android REGEX avec Pattern et Matcher les Classes?
J'ai le code suivant:
String example = "<!--§FILES_SECTION§\n" +
"Example line one\n" +
"Example line two\n" +
"§FILES_SECTION§-->";
String myPattern = ".*?FILES_SECTION.*?\n(.*?)\n.*?FILES_SECTION.*?";
Pattern p = Pattern.compile(myPattern);
Matcher m = p.matcher(example);
if ( m.matches() )
Log.d("Matcher", "PATTERN MATCHES!");
else
Log.d("MATCHER", "PATTERN DOES NOT MATCH!");
Pourquoi faut-il toujours revenir "MODÈLE NE correspond PAS?"
Votre modèle n'est même pas proche de ce que vous voulez. Je vous recommande devrait plus sur les regex avant: docs.oracle.com/javase/tutorial/essential/regex
OriginalL'auteur Davidoff | 2012-03-06
Vous devez vous connecter pour publier un commentaire.
Par défaut, l' . ne correspond pas à des sauts de ligne. Vous devez ajouter une option de type expression régulière de sorte qu'il n':
OriginalL'auteur arc
m.matches() ne retourne true si l'ensemble de la chaîne de matchs. L'utilisation de m.find() au lieu de cela, et il devrait mieux fonctionner!
J'étais peut-être un peu floues. matches() ajoute implicitement "^" et "$" au début et à la fin de votre profil, de sorte que votre chaîne ne correspond pas car il commence par "<!--" et se termine avec "-->". Peut-être une combinaison de find() et de l'arc de la solution? Edit: désolé, j'ai lu votre modèle de mal. Comme Caner dit, il semble un peu mal.
OriginalL'auteur Petter
Tout d'abord, comme l'arc a dit, . ne correspond pas \n, sauf si vous activez Modèle.DOTALL, et que Petter M, vous devez utiliser m.find(), sinon ça ne correspond pas.
Ensuite, vous pouvez utiliser cette autre expression, si, pour une raison quelconque, vous ne pouvez pas travailler avec le Modèle.DOTALL.
FILES_SECTION(?:.|\s)*FILES_SECTION
(Remarque je suis en utilisant un non-capture de groupe pour les caractères entre le FILES_SECTION délimiteurs).
Aussi, vous pouvez utiliser votre expression avec des allumettes() permettant de Modèle.DOTALL ET en enlevant tous les ? les caractères de l'expression. Rappelez-vous un? correspond à une valeur entre 0 et 1 fois, et a* correspond à un entre 0 et n fois... donc écrit quelque chose comme un*? est une sorte de plaidoirie. De cette façon, votre propre expression peut être simplifiée comme suit: ".*FILES_SECTION.*FILES_SECTION.*", à condition que vous utilisez le Modèle.DOTALL. De toute façon, je pense que cette expression pourrait être trop large. 🙂
Une autre façon vous pourriez éviter DOTALL serait à l'aide de cette classe de personnage: [\d\d]+ correspondent à rien de ce qui est, soit un chiffre ou non un chiffre.. c'est à dire rien du tout
OriginalL'auteur greguren