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.

SetiSeeker
la source

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.

Ned Batchelder
la source
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 .

Alin Purcaru
la source