Regex - ne contient pas certains caractères


275

J'ai besoin d'une expression régulière pour correspondre si, n'importe où dans une phrase, il n'y a PAS <ou>.

Si <ou> sont dans la chaîne, elle doit retourner false.

J'ai eu un succès partiel avec cela, mais seulement si mes <> sont au début ou à la fin:

(?!<|>).*$

J'utilise .Net si cela fait une différence.

Merci pour l'aide.

Réponses:


437
^[^<>]+$

Le signe insertion dans la classe de caractères ( [^) signifie correspondre à tout, mais cela signifie donc, début de la chaîne, puis un ou plusieurs de tout sauf <et >, puis la fin de la chaîne.


3
Que signifie le premier signe insertion? Cela ne signifierait-il pas quelque chose qui ne contient pas ces caractères ... signifiant ainsi uniquement les chaînes qui contiennent ces caractères?
RobKohr

11
Le premier caret signifie, début de chaîne. Le dollar signifie, fin de chaîne.
Ned Batchelder du

2
@PhilipRego Attention aux caractères spéciaux: le shell interprète certains d'entre eux. Vérifiez si vous avez maintenant un fichier nommé '] + $' dans votre répertoire. Mettez l'intégralité de l'expression régulière entre guillemets simples pour le faire fonctionner.
Ned Batchelder

Très bonne réponse! Pourriez-vous ajouter une explication de la raison pour laquelle il y a un +premier caret?
Dr_Zaszuś

1
@ Dr_Zaszuś "+" signifie "un ou plusieurs" et "^" signifie "début de chaîne".
Ned Batchelder

59

Voici:

^[^<>]*$

Cela testera la chaîne qui n'a <ni>

Si vous voulez tester une chaîne qui peut avoir <et >, mais doit également avoir quelque chose d'autre que vous devez utiliser juste

[^<>] (or ^.*[^<>].*$)

[<>]signifie tout <ou> et [^<>]signifie tout ce qui n'est pas de <ou> .

Et bien sûr le lien obligatoire .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.