Une expression régulière peut-elle être utilisée pour faire correspondre n'importe quelle chaîne sauf une constante de chaîne spécifique, disons "ABC"? Est-ce possible d'exclure une seule constante de chaîne? Merci votre aide à l'avance.
Vous devez utiliser une assertion de prévision 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 Ruby et en javascript:
^((?!ABC).)*$
Dans .NET, vous pouvez utiliser le groupement à votre avantage comme ceci:
http://regexhero.net/tester/?id=65b32601-2326-4ece-912b-6dcefd883f31
Vous remarquerez que:
(ABC)|(.)
Va tout saisir sauf ABC dans le 2ème groupe. Des parenthèses entourent chaque groupe. Donc (ABC) est le groupe 1 et (.) Est le groupe 2.
Donc, vous prenez juste le 2ème groupe comme celui-ci dans un remplacement:
$2
Ou, dans .NET, consultez la collection Groups de la classe Regex pour un peu plus de contrôle.
Vous devriez également pouvoir faire quelque chose de similaire dans la plupart des autres implémentations de regex.
MISE À JOUR: J'ai trouvé un moyen beaucoup plus rapide de faire cela ici: http://regexhero.net/tester/?id=997ce4a2-878c-41f2-9d28-34e0c5080e
Il utilise toujours 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.
Ce n’est pas facile, à moins que votre moteur d’expression régulière dispose d’un support spécifique. Le moyen le plus simple consiste à utiliser une option de correspondance négative, par exemple:
$var !~ /^foo$/
or die "too much foo";
Sinon, vous devez faire quelque chose de mal:
$var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/
or die "too much foo";
Celle-ci dit en gros "si elle commence par non -f
, le reste peut être n'importe quoi; si elle commence par f
, non -o
, le reste peut être n'importe quoi; sinon, si cela commence fo
, le caractère suivant aurait intérêt à ne pas être un autre o
".
Vous pouvez utiliser un préfixe négatif, ou quelque chose comme ceci:
^([^A]|A([^B]|B([^C]|$)|$)|$).*$
Peut-être que cela pourrait être un peu simplifié.
Essayez cette expression régulière:
^(.{0,2}|([^A]..|A[^B].|AB[^C])|.{4,})$
Il décrit trois cas:
A
, ouA
mais le second n'est pas B
, ouA
, le second B
mais le troisième n'est pas C