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 ^.*[^<>].*$)

Où [<>]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.