En Java, lorsque vous effectuez un replaceAll pour rechercher un modèle d'expression régulière comme:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
(pour supprimer les mots consécutifs insensibles à la casse en double, par exemple Test test), je ne sais pas où j'ai mis le fichier ?i
. J'ai lu que c'était censé être au début, mais si je le retire, j'attrape des mots consécutifs en double (par exemple test test), mais pas des mots insensibles à la casse (par exemple test test). J'ai donc pensé que je pourrais ajouter le? I au début, mais cela ne semble pas faire le travail. Des pensées? Merci!
java
regex
case-sensitive
Cristal
la source
la source
Réponses:
RegexBuddy me dit si vous voulez l'inclure au début, c'est la syntaxe correcte:
la source
Vous pouvez également faire correspondre les expressions rationnelles insensibles à la casse et les rendre plus lisibles en utilisant la constante Pattern.CASE_INSENSITIVE comme:
la source
Pattern.compile(myregex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE)
(?i)
, les expressions régulières Java étaient déjà assez illisibles: SOui, l'insensibilité à la casse peut être activée et désactivée à volonté dans Java regex.
Il semble que vous vouliez quelque chose comme ceci:
Notez que l' indicateur incorporé ne l'
Pattern.CASE_INSENSITIVE
est(?i)
pas\?i
. Notez également qu'un superflu\b
a été supprimé du motif.Le
(?i)
est placé au début du modèle pour activer l'insensibilité à la casse. Dans ce cas particulier, il n'est pas remplacé plus tard dans le modèle, donc en fait le modèle entier est insensible à la casse.Il est à noter qu'en fait, vous pouvez limiter l'insensibilité à la casse à seulement certaines parties du modèle entier. Ainsi, la question de savoir où le mettre dépend vraiment de la spécification (bien que pour ce problème particulier, cela n'a pas d'importance car il
\w
est insensible à la casse.Pour démontrer, voici un exemple similaire de réduction de séries de lettres comme
"AaAaaA"
juste"A"
.Supposons maintenant que nous spécifions que l'exécution ne doit être réduite que si elle commence par une lettre majuscule. Ensuite, il faut mettre le
(?i)
à l'endroit approprié:Plus généralement, vous pouvez activer et désactiver n'importe quel indicateur dans le modèle comme vous le souhaitez.
Voir également
java.util.regex.Pattern
/regex/i
(Pattern.CASE_INSENSITIVE
en Java), vous pouvez faire/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/
\b
entre a\w
et a\s
)Questions connexes
la source
Si toute votre expression est insensible à la casse, vous pouvez simplement spécifier l'
CASE_INSENSITIVE
indicateur:la source
Vous pouvez également placer votre chaîne initiale, dont vous allez vérifier la correspondance de modèle, en minuscules. Et utilisez respectivement dans votre modèle des symboles minuscules.
la source