2016-03-30 8 views
-1

Dies ist übrigens Google Analytics Regex.Wie kann eine bestimmte zweistellige Nummer ausgeschlossen werden (ist zufällig "12")?

Ich möchte die Nummer "8" und die Nummer "12" (zwölf) von der Übereinstimmung ausschließen.

Dies ist das Beste, was ich mit so weit kommen konnte, aber es ist nicht korrekt:

[^((12)|8)] 

Dies ist nach regexpal.com schließt noch 1, 2 und 8 statt 12 und 8.

EDIT: Um die Kommentare unten meine Frage zu beantworten, werden die Daten immer in Form einer ein- oder zweistelligen Zahl (zB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ..., 99). Es ist definitiv nicht kritisch, dass der Ausdruck nur nach Zahlen gefiltert wird, da ich niemals erwarten würde, irgendeine andere Art von Daten zu sehen, aber dies geht in dieses Feld.

+0

PS - Wenn ich "Google Analytics Regex" sage, meine ich, dass negative Lookaheads (und möglicherweise einige andere erweiterte Regex-Funktionen) nicht verwendet werden können. Zumindest verstehe ich das! Vielen Dank. :) – Drewdavid

+0

beschreiben alle Zahlen, die nicht 8 und 12 sind –

+0

@Drewdavid: Bitte senden Sie Beispieldaten, in denen Sie übereinstimmende Zahlen sind? –

Antwort

1

Um eine beliebige Anzahl (integer) außer 8 und 12 zu entsprechen, ein mögliches Muster:

[02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)? 

(Beachten Sie, dass dies nicht der kürzeste, aber Alternativen sind nach Wahrscheinlichkeit sortiert.)

Aber wenn Sie dieses Muster allein mit Witz verwenden h eine Zeichenfolge, die 12 enthält, wird es gelingen, nur die 1 (oder die 2) übereinstimmen. Um das Problem zu lösen, muss Ihr Muster verankert werden.

Anchors

Zwei Möglichkeiten:

1) Sie testen, ob eine ganze Reihe eine Zahl ist:

In diesem Fall können Sie Ihren Ausdruck mit Start und Ende des vollständigen String-Anker:

^([02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?)$ 

2) Sie testen, wenn eine Zeichenfolge, die eine Zahl enthält:

Die meisten anderen Regex-Engines verwenden eine Wortgrenze \b, um dies zu tun, aber nach this document scheint es, dass diese Funktion nicht verfügbar ist. So besteht die Abhilfe alle möglichen Szenarien auf der linken Seite zu beschreiben und auf der rechten Seite des Musters:

([^0-9]|^)([02-79][0-9]*|8[0-9]+|1([013-9][0-9]*|2[0-9]+)?)([^0-9]|$) 

wo [^0-9]|^ bedeutet ein Zeichen, das keine Ziffer oder der Beginn der Zeichenfolge ist. (gleiche Sache für das Ende)

+0

danke für das Teilen Ihrer Antwort! Dies scheint in meinen Test-Tools zu testen, um zu sehen, ob es für Google Analytics funktioniert! – Drewdavid

2

Lassen Sie uns sehen, was Sie versuchen, von Regex [^((12)|8)] zu tun. Hier haben Sie innerhalb Zeichenklasse Spiel nichts außer erklärt ()|128. So wird jede Instanz dieser Zeichen verworfen.

Result of [^((12)|8)]


Um nicht 12 passen und 8 Sie müssen angeben, was Sie anpassen möchten.

Regex:\b([02-9][0-9]|[0-9][013-9]|[0-79])\b

Erläuterung:

  • \b auf beiden Seiten gesetzt Wortgrenze nur Zahlen übereinstimmen.

  • [02-9][0-9] Matches alle Zahlen außer 1 vorangestellten 2 d.h 12.

  • [0-9][013-9] Matches alle Zahlen außer 2 von 1 d.h 12

  • gelang
  • [0-79] Matches alle Zahlen außer 8.

  • | Änderung verwendet, um einen der Fälle zu entsprechen.

Regex101 Demo

+0

Danke @noob das ist cool! Bei einigen Tests habe ich eine Entdeckung gemacht, dass dies auch die Zahl "18" ausschließt! Zumindest laut regexpal.com. Ich habe nur bis "50" getestet. – Drewdavid

+0

@ Drewdavid: Oh! Ich habe einen dummen Fehler in Regex gemacht. Aktualisierte Antwort jetzt. Sollte überprüfen. Ich korrigierte die zweite Änderung von '[0-9] [0137-9] 'nach' [0-9] [013-9] '. Deshalb war es nicht passend für "8" bei Einheiten. –

+1

Danke, nein. Ich erhebe diese Antwort, akzeptiere aber @ Casimir et Hippolyte aufgrund der mehrdeutigen Behandlung des '\ b'-Features durch Google Analytics! Vielleicht finde ich das heraus und aktualisiere die Frage. Ich würde es zweimal aufwerten, wenn ich könnte, wegen der nützlichen Erklärung. :) – Drewdavid

Verwandte Themen