9
votes

Expression régulière Java pour correspondre à un mot exact avec des caractères spéciaux

J'ai une liste de mots-clés entrés par l'utilisateur et ils peuvent contenir les caractères spéciaux tels que $, #, @, ^ et, code> etc.

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 Match Mot-clé Exact Strong>. P>

Case 1: Mot-clé simple - message simple strong> p>

i utilisé \ b code> pour correspondre à un mot-clé exacte et celui-ci fonctionne EM> P>

>> false
>> true
>> false


1 commentaires

Un mot limite ne signifie pas une limite d'espace. C'est là que vous êtes confus.


5 Réponses :


3
votes

Case 2 semble le contraire comme le cas 3, donc je ne pense pas que vous puissiez combiner le modèle s.

pour le cas 2, votre modèle pourrait regarder Comme: xxx

Dans ce cas, nous entourons le mot-clé par Whitespace ou début / fin de saisie.

pour le cas 3, votre modèle pourrait ressembler à: xxx

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 $ et ^ ), puis nous acceptons WhitSpace ou la fin de l'entrée comme le caractère suivant le mot-clé.


1 commentaires

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é !!!



3
votes

Utilisez (?: ^ | \ s) ("Démarrer le texte ou l'espace de texte") au lieu du premier \ B et (?: $ | S) ("Fin du texte ou des espaces blancs") au lieu du second \ b dans votre regex.


1 commentaires

Merci pour l'explication



1
votes

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;
    }
}


0 commentaires

1
votes

essayez peut-être de cette façon xxx

(? <= ...) et (? = ...) est positif regarder derrière et en avant afin qu'il vérifiera si votre searchstring aura

  • espace blanc \\ s ou début de l'entrée ^ avant et
  • espace blanc \\ s ou fin de l'entrée & après.

    Également au cas où vous souhaitez rechercher des caractères spéciaux tels que $ + et d'autres que vous devez échapper. Pour ce faire, vous pouvez utiliser motif.Quelle (RechercheStubstring)


0 commentaires

0
votes

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: xxx pré>

si vous voulez exact Correspondance: P>

Pattern p = Pattern.compile("(\\s|^|#|:|-)"+word+"(\\s|\\#|\\,|\\.|$)", Pattern.CASE_INSENSITIVE);


0 commentaires