2011-01-09 61 views
1

我需要一個正則表達式來檢查一個數值是否大於另一個值。 非常像我會寫(if 10>8) ...正則表達式:如果數字大於則...匹配?

顯然,我的代碼片段不會發生,我缺乏正則表達式自己排除它的經驗。這可能與正則表達式有關嗎?

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

謝謝!

+3

你爲什麼要用正則表達式來做到這一點? – 2011-01-09 16:15:27

+0

您能否詳細說明您必須處理的數據? – Ikke 2011-01-09 16:18:05

回答

3

如果我正確理解你的問題,你想要一個正則表達式匹配任意長度的連續數字,其中第二個大於第一個。這與regexen無法處理。這顯然不是一種常規的語言,沒有任何常見的擴展(反向引用,遞歸引用)足夠強大來改變它。

在一些正則表達式實現(例如Perl)中,可以將主機語言的代碼嵌入到正則表達式中。在這種情況下,您當然可以將謂詞num1 < num2作爲Perl代碼嵌入,但我認爲這不算是一個正則表達式的解決方案。

7

對於正則表達式來說,這不是一個好問題。提取數字並進行數字比較。

1

那麼如果我理解正確,你必須在.htaccess或類似的東西里面比較這些數字。 有一個愚蠢的和unhealty方式做比較,並要求評估字符串中的數字: 「^ [0-9] [1-9] [0-9] $」匹配,如果你比較「5 12 「這樣你就可以明白,1,5小於12

相比長度相同的數是不是瘋了只針對數字100

我想如果你能更好地解釋這是您的上下文(iMacros的下。 htaccess ...)有人可以建議一個更好的方式來做到這一點。

0

這不是直接用正則表達式來完成的。您正在編程的語言可能允許擴展regexp語法來插入任意代碼。例如在Perl中:

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

成功但56 55沒有。在https://stackoverflow.com/a/30936388/626804我進一步解釋一下。

這是否是好品味還是一個好主意是另一回事 - 但在Perl中,如果您真的想要,可以將這種比較融入到所謂的「正則表達式」匹配中。