2011-01-09 13 views
1

Ich brauche eine Regexp, die überprüft, ob ein numerischer Wert größer als ein anderer Wert ist. Ziemlich ähnlich wie ich würde schreiben (if 10>8) ...Reguläre Ausdrücke: Matching wenn Nummer größer ist als ...?

Offensichtlich wird mein Schnipsel es nicht passieren lassen und mir fehlt die Erfahrung von Regexp, um es selbst zu sortieren. Ist das mit regulären Ausdrücken möglich?

^[1-9]+[0-9]+$ 

Vielen Dank!

+3

Warum sollten Sie das mit regulären Ausdrücken machen? –

+0

Können Sie näher auf die Daten eingehen, die Sie verarbeiten müssen? – Ikke

+0

Wenn eine Zahl konstant ist, dann ist es möglich (wenn auch hässlich!). Wenn beide Variablen sind, dann habe ich Angst @ Sepp2k ist richtig zu sagen, dass es unmöglich ist. – marcog

Antwort

3

Wenn ich Ihr Problem richtig verstehe, wollen Sie eine Regex, die zwei aufeinander folgenden Zahlen von beliebiger Länge entspricht, wo die zweite größer als die erste ist. Dies ist mit Regexen nicht möglich. Es ist eindeutig keine reguläre Sprache und keine der üblichen Erweiterungen (Rückwärtsreferenzen, rekursive Referenzen) sind mächtig genug, um das zu ändern.

In einigen Regex-Implementierungen (z. B. Perls) ist es möglich, Code in der Host-Sprache in die Regex einzubetten. In diesem Fall können Sie natürlich einfach das Prädikat num1 < num2 als Perl-Code einbetten, aber ich glaube nicht, dass das als Lösung als Regex zählt.

7

Dies ist kein gutes Problem für Regexe zu lösen. Extrahiere die Zahlen und vergleiche sie numerisch.

+0

Das kann ich leider nicht tun, da es keine Vergleichssache gibt – Industrial

+4

Sie müssen uns dann mehr über Ihr Problem erzählen. Beispiele der Daten, welche Programmiersprache oder Werkzeuge Sie verwenden, und so weiter. –

1

Nun, wenn ich richtig verstehe, müssen Sie diese Zahl in einem .htaccess oder etwas ähnliches vergleichen. Es gibt eine dumme und unhealty Weg, um den Vergleich zu tun, und benötigen die Zahlen in der ausgewerteten Zeichenfolge: "^ [0-9] [1-9] [0-9] $" übereinstimmen, wenn Sie "5 12 vergleichen "so kann man verstehen, dass 5 weniger als 12

Vergleich Anzahl gleicher Länge ist nicht verrückt nur für Zahlen unter 100

ich denke, wenn man erklären kann, besser was ist Ihr Kontext (iMacros. htaccess ...) kann jemand einen besseren Weg vorschlagen, dies zu tun.

0

Es ist nicht einfach mit regulären Ausdrücken getan. Die Sprache, in der Sie programmieren, kann Erweiterungen der Regexp-Syntax ermöglichen, um beliebigen Code einzubinden. Zum Beispiel in Perl:

$_ = '54 55'; 
say 'matched' if /\A(\d\d) (\d\d)(?(?{$1 >= $2})(*FAIL))\z/; 

Dies gelingt aber 56 55 nicht. In https://stackoverflow.com/a/30936388/626804 erkläre ich ein bisschen weiter.

Ob das ein guter Geschmack oder eine gute Idee ist, ist eine andere Sache - aber in Perl können Sie diese Art von Vergleich in einen sogenannten 'regulären Ausdruck' matchen, wenn Sie wirklich wollen.