J'ai passé du temps, mais je dois toujours faire la solution. J'ai besoin d'une expression régulière qui est capable de faire correspondre des mots avec des signes de signes (comme C ++) dans la chaîne.
J'ai utilisé J'ai besoin d'une regex pour détecter si la chaîne d'entrée contient un mot C ++. Entrée comme, p> etc. P> ps. Utilisation de la fonction C #, .NET REGEX.MATCH. P> Merci d'aide! P> P> / \ bword \ b / code>, des mots "habituels", fonctionne bien. Mais dès que j'essaie / \ bc \ + \ + \ b / code> il ne fonctionne tout simplement pas. C'est quelque chose qui fonctionne mal avec les signes de plus. P>
5 Réponses :
notez que nous ne pouvons pas utiliser + code> est un caractère spécial afin que vous ayez besoin de vous échapper \ b code> car < code> + code> n'est pas un caractère de mots. p> p>
Bonjour Kenny, je l'utilise. Il n'a pas été affiché en vue. J'ai corrigé une question. Ne fonctionne pas comme ça.
Visual Studio ne compilera pas lorsque j'essaye d'échapper au signe plus.
@WEFX Ajouter un @ code> avant la double citation: @ "\ bc \ + \ + (?! \ w)" code>
PLUS SIGN avez-vous une signification particulière, vous devrez donc vous échapper avec mise à jour: le problème était avec \ code>. La même règle s'applique à ces caractères: \, *, +,?, |, {, [ (,), ^, $ , #, code> et espace p>
\ b code> séquence p>
Le problème n'est pas avec le caractère plus, que vous avez échappé correctement, mais la séquence \ b code>. Il indique une limite de mot, qui est un point entre un caractère de mot (alphanumérique) et autre chose. De plus n'est pas un caractère de mot, donc pour \ b code> pour correspondre, il devrait y avoir un caractère de mot directement après le dernier signe plus. P>
\ bc \ + \ + \ b code> correspond à "test c ++ test" mais pas "Test C ++ test" par exemple. Essayez quelque chose comme \ bc \ + \ + \ s code> si vous vous attendez à ce qu'il y ait une espace blanche après le dernier signe plus. P>
Spécifiquement \ b code> correspond entre un \ w code> et un \ w code> (ou visa versa).
Merci d'une bonne réponse! \ BC \ + \ + \ S, fonctionne bien, mais cela correspond également à l'espace après le dernier signe +, ce n'est pas un gros problème, mais de toute façon un peu inattendu.
@Alexander Vous pouvez rendre l'espace un lookahead pour éviter y compris celui-ci dans la correspondance: \ bc \ + \ + (? = \ s) code>.
Comme les autres ont dit, votre problème n'est pas le signe Il y a aussi une autre erreur dans votre regex, vous souhaitez correspondre à Char + code> que vous avez échappé correctement, mais le \ b code> qui correspond à une limite zéro qui correspond à la limite de mot qui a lieu entre Word \ w code> et non-word \ w code> char. p>
C code> (majuscule) avec C ++ code> (minuscule). Pour que vous puissiez changer votre regex. à / \ bc \ + \ + / code> ou utilisez le modificateur i code> pour correspondre insensibles insensibles: / \ bc \ + \ + / i code> < / p>
Si vous voulez faire correspondre un c ++ code> entre les caractères non-mot (CHARS autres que des lettres, chiffres et caractères de soulignement) vous pouvez utiliser var pattern = $@"(?<!S){Regex.Escape(word)}(?!\S)";