L'expression régulière peut-elle être utilisée pour correspondre à n'importe quelle chaîne sauf une constante de chaîne spécifique disons "ABC"? Est-ce possible d'exclure une seule chaîne spécifique? Merci d'avance pour votre aide.RegEx pour exclure une constante de chaîne spécifique
Répondre
Ce n'est pas facile, sauf si votre moteur d'expressions rationnelles a un support spécial. La façon la plus simple serait d'utiliser une option match négative, par exemple:
$var !~ /^foo$/
or die "too much foo";
Sinon, vous devez faire quelque chose mal:
$var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/
or die "too much foo";
Que l'on dit en gros « si elle commence par non - f
, le reste peut être n'importe quoi, s'il commence par f
, non o
, le reste peut être n'importe quoi, sinon, s'il commence fo
, le prochain caractère ferait mieux de ne pas être un autre o
".
Cela ne permettra pas la chaîne vide, 'f',' fo' et 'foo'. – Gumbo
@Gumbo: Il permet la chaîne vide très bien; remarquez que ($) est la première alternative, donc^$ (chaîne vide) est acceptée. Je l'ai testé, et au moins dans perl 5.0.10 la chaîne vide est acceptée. – derobert
... Désolé, perl 5.10.0, bien sûr! – derobert
Vous devez utiliser une assertion Lookahead négative.
(?!^ABC$)
Vous pouvez par exemple utiliser ce qui suit.
(?!^ABC$)(^.*$)
Si cela ne fonctionne pas dans votre éditeur, essayez ceci. Il est testé pour fonctionner en rubis et javascript:
^((?!ABC).)*$
Cela fonctionnera si vous recherchez une chaîne qui n'inclut pas ABC. Mais est-ce le but? Ou est le but de correspondre à tous les caractères sauf ABC? –
Merci d'avoir signalé cela, vous avez raison - ma suggestion évite seulement les chaînes commençant par ABC - j'ai oublié d'ancrer l'assertion. Je vais corriger cela. –
C'est encore différent de ce que je pensais. Peut-être que l'intervenant clarifiera ce qu'il cherche. –
Vous pouvez utiliser préanalyse négative, ou quelque chose comme ceci:
^([^A]|A([^B]|B([^C]|$)|$)|$).*$
Peut-être que cela pourrait être un peu simplifié.
Dans .NET, vous pouvez utiliser le regroupement à votre avantage comme celui-ci:
http://regexhero.net/tester/?id=65b32601-2326-4ece-912b-6dcefd883f31
Vous remarquerez que:
(ABC)|(.)
saisira tout sauf ABC dans le 2ème groupe. Les parenthèses entourent chaque groupe. Alors (ABC) est un groupe 1 et groupe 2.
Alors vous prenez juste le 2ème groupe comme celui-ci dans une remplacer (.):
$2
Ou dans le regard .NET à la collection Groupes à l'intérieur du Classe Regex pour un peu plus de contrôle.
Vous devriez être capable de faire quelque chose de similaire dans la plupart des autres implémentations regex.
MISE À JOUR: J'ai trouvé un moyen beaucoup plus rapide de le faire ici: http://regexhero.net/tester/?id=997ce4a2-878c-41f2-9d28-34e0c5080e03
Il utilise encore le regroupement (je ne peux pas trouver un moyen qui n'utilise pas le regroupement). Mais cette méthode est plus de 10 fois plus rapide que la première.
Essayez cette expression régulière:
^(.{0,2}|([^A]..|A[^B].|AB[^C])|.{4,})$
Il décrit trois cas:
- moins de trois caractères arbitraires
- exactement trois caractères, alors que ce soit
- le premier n'est pas
A
ou - le premier est
A
mais le second n'est pasB
, ou - le premier est
A
, la deuxièmeB
mais le troisième n'est pasC
- le premier n'est pas
- plus de trois caractères arbitraires
- 1. Regex Exclure caractères Groupe
- 2. Regex pour vérifier une chaîne
- 3. Exclure sous-répertoire spécifique de la règle mod_rewrite
- 4. Regex pour détecter Javascript Dans une chaîne
- 5. RegEx pour dire si une chaîne ne contient pas un caractère spécifique
- 6. Utilisez regex pour trouver une chaîne spécifique pas dans la balise html
- 7. Comment extraire une chaîne pure d'une chaîne constante
- 8. Regex pour remplacer la chaîne
- 9. Utilisation de Regex pour modifier une chaîne en C#
- 10. Comment utiliser regex pour une partie de chaîne en C#
- 11. Regex pour trouver chaîne à l'intérieur chaîne à l'intérieur chaîne
- 12. Comment puis-je écrire une regex pour exclure les caractères alphanumériques et les espaces?
- 13. Regex pour trouver un nombre dans une chaîne
- 14. Regex pour faire correspondre "tout sauf" une chaîne
- 15. regex dans une chaîne (jusqu'à l'espace)
- 16. Regex pour supprimer lat/long d'une chaîne
- 17. Regex pour faire correspondre la chaîne entre%
- 18. Regex analysant une syntaxe de chaîne personnalisée en PHP
- 19. Comment exclure une méthode/un constructeur spécifique des résultats de la tâche Ant javadoc?
- 20. regex: Correspondance des parties d'une chaîne lorsque la chaîne contient une partie d'un modèle regex
- 21. de Split chaîne à la ligne spécifique pour NSString
- 22. Pourquoi spécifier une constante définie dans une constante de classe en lançant une erreur?
- 23. Initialisation de pointeur? pour une fonction spécifique
- 24. Regex pour remplacer la chaîne avec une autre chaîne dans MS Word?
- 25. Questions concaténer à une constante de tableau pour options_for_select
- 26. Android RadioButton retourner une constante?
- 27. Recherche de Regex pour trouver des retours à la ligne dans une grande chaîne (pour C#)
- 28. REGEX: remplacer un caractère spécifique après l'apparition d'un autre personnage dans la chaîne
- 29. Comment couper une partie d'une chaîne avec une regex?
- 30. Python Regex combiné avec une substitution de chaîne?
Quel outil êtes-vous en utilisant? Selon l'outil, il pourrait y avoir un moyen de spécifier cet externe à votre regex. grep supporte une option -v pour inverser le sens de la correspondance, par exemple. –
Vous ne pouvez pas juste 'si (/^ABC $ /) else {...} où l'autre serait l'ABC ne correspondant pas – Xetius
Alors cherchez-vous à correspondre à tous les caractères d'une chaîne donnée, sauf la partie ABC de celui-ci ? En d'autres termes, "Une chaîne avec ABC" correspondrait à "Une chaîne avec". –