J'ai une liste de mots-clés entrés par l'utilisateur et ils peuvent contenir les caractères spéciaux tels que selon mes besoins quand je reçois Liste des messages texte que j'ai besoin de rechercher tous les mots-clés de chaque message. p> Nous devons Case 1: Mot-clé simple - message simple strong> p> i utilisé $, #, @, ^ et, code> etc.
\ b code> pour correspondre à un mot-clé exacte et celui-ci fonctionne EM> P>
>> false
>> true
>> false
5 Réponses :
Case 2 semble le contraire comme le cas 3, donc je ne pense pas que vous puissiez combiner le modèle pour le cas 2, votre Dans ce cas, nous entourons le mot-clé par Whitespace ou début / fin de saisie. p> pour le cas 3, votre Dans ce cas, nous précèdons le mot clé avec n'importe lequel des Les caractères spéciaux de votre choix (notez les caractères réservés évasés code> s.
modèle code> pourrait regarder Comme: p>
modèle code> pourrait ressembler à: p>
$ code> et
^ code>), puis nous acceptons WhitSpace ou la fin de l'entrée comme le caractère suivant le mot-clé. p> p>
J'ai combiné à la fois les modèles comme étant inférieur à la pattern.com ("(\\ s | ^)" + motif.Quelle (phrase) + "(\\ s | $)", modèle.case_insensitive); et ça a fonctionné !!!
Utilisez (?: ^ | \ s) code> ("Démarrer le texte ou l'espace de texte") au lieu du premier
\ B code> et
(?: $ | S) Code> ("Fin du texte ou des espaces blancs") au lieu du second
\ b code> dans votre regex. p>
Merci pour l'explication
Le problème vient de la manière dont "mot exact" est défini. Ce n'est pas seulement des espaces qui peuvent entourer le mot pour en faire un mot. Par exemple, dans la plupart des circonstances, on voudrait une correspondance exacte pour "Bonjour" de travailler avec.
"Bonjour" "," que jeune homme vient de dire bonjour à cet autre jeune homme "et" j'aimerais que les gens répondent toujours à la Téléphone en disant Ahoy plutôt que bonjour. " P>
Si vous voulez que le match soit divisé uniquement sur WhitSpace, je pense que vous devrez spécifier la condition blanche. En supposant également que vous le souhaitez également correspondre à la fin, je proposerais quelque chose comme ça. P>
public String escapeSearchString(String patternString) { StringBuilder stringBuilder = new StringBuilder(patternString.length() * 3); for (char c : patternString.toCharArray()) { if (isEscapableCharacter(c)) { stringBuilder.append("\\"); } stringBuilder.append(c); } } public boolean isEscapableCharacter(char c) { switch (c) { case '#': case '$': case '@': case '^': case '&': return true; default: return false; } }
essayez peut-être de cette façon (? <= ...) et (? = ...) est positif regarder derrière et en avant afin qu'il vérifiera si votre Également au cas où vous souhaitez rechercher des caractères spéciaux tels que searchstring code> aura p>
\\ s code> ou début de l'entrée
^ code> avant et li>
\\ s code> ou fin de l'entrée
& code> après. li>
ul>
$ code>
+ code> et d'autres que vous devez échapper. Pour ce faire, vous pouvez utiliser
motif.Quelle (RechercheStubstring) code> p> p>
Par exemple, si votre mot veut avoir un caractère spécial (par exemple ici '#') au début et à la fin de celle-ci, vous devez écrire ce qui suit: si vous voulez exact Correspondance: P> Pattern p = Pattern.compile("(\\s|^|#|:|-)"+word+"(\\s|\\#|\\,|\\.|$)", Pattern.CASE_INSENSITIVE);
Un mot limite ne signifie pas une limite d'espace. C'est là que vous êtes confus.