2010-03-25 9 views
4

J'ai un problème de regex, j'essaie d'ignorer juste le nombre '41', je veux 4, 1, 14 etc pour tous correspondre.Regex négative requête match

J'ai ce [^\b41\b] qui est effectivement ce que je veux, mais cela ne tient pas également toutes les itérations simples des valeurs 1 et 4.

À titre d'exemple, cela correspond à « 41 », mais je veux qu'il PAS match: \ B41 \ b

Répondre

5

Essayez quelque chose comme:

\b(?!41\b)(\d+) 

La construction (?!...) est un negative lookahead donc cela signifie: trouver une limite de mot qui est pas suivi de "41" et capturer une séquence de chiffres après lui.

+0

Salut les gars, repérer – Matt

1

Vous pouvez utiliser un look-ahead assertion négatif pour exclure 41:

/\b(?!41\b)\d+\b/ 

Cette expression régulière doit être interprété comme: A toute limite de mot \b, si elle n'est pas suivie 41\b ((?!41\b)), correspondre à l'une ou plus de chiffres suivis d'une limite de mot.

Ou même avec un look-behind assertion négatif:

/\b\d+\b(?<!\b41)/ 

Cette expression régulière doit être interprété comme: Faites correspondre un ou plusieurs chiffres qui sont entourés par des limites de mots, mais seulement si la sous-chaîne à la fin de la la correspondance n'est pas précédée de \b41 ((?<!\b41)).

Ou peut même utiliser la syntaxe de base juste:

/\b(\d|[0-35-9]\d|\d[02-9]|\d{3,})\b/ 

Ce ne rassemble que des séquences de chiffres entourés par des limites de mots de soit:

  • un seul chiffre
  • deux chiffres qui ne sont pas un 4 à la première position ou non 1 à la deuxième position
  • trois chiffres ou plus
+0

Salut les gars, repérer – Matt