2014-08-28 275 views
1

有一個只由數字組成的字符串輸入,即整數。如何寫一個正則表達式來接受除1,2和25之外的所有數字?什麼是匹配除1,2,25以外的所有數字的正則表達式?

我想在BeanIO(支持正則表達式)的record identification裏面使用這個來跳過一些具有特定值的記錄。

我到達了這個點^(1|2|25)$,但我想要的是相反的東西。

+3

首先你使用什麼語言?第二,如何分享迄今爲止所嘗試的內容? – Dalorzo 2014-08-28 16:17:53

+0

你爲什麼這麼想使用正則表達式呢?這聽起來像你應該''atoi()'或類似的並且比較實際的數字,或者甚至直接比較字符串。 – Dolda2000 2014-08-28 16:18:14

+0

實際上,正則表達式不會匹配數字,它只能匹配字符。七位數字符串仍然只是一個int。 – sln 2014-08-28 16:46:47

回答

8

不就是一個正則表達式是這樣做的最好的工具,但如果你堅持...

使用負前瞻:

/^(?!(?:1|2|25)$)\d+/ 

在這裏看到它在行動:http://regexr.com/39df2

+0

這對我有用!非常感謝您的幫助! – ktulinho 2014-08-28 17:05:54

2

您可以使用類似如下的格式:

^([03-9]\d*|1\d+|2[0-46-9]\d*|25\d+)$ 

或者,如果您正則表達式引擎支持它,你可以只使用一式斷言((?!…))是這樣的:

^(?!1$|25?$)\d+$ 

但是,你可能還不如干脆解析代碼的數量,並確保它不不等於被禁止的價值之一。

0

See this related question on stackoverflow

您不應該嘗試編寫這樣的正則表達式,因爲大多數語言都不支持正則表達式的補充。

相反,你應該做的是寫,只有這三樣東西相匹配的正則表達式:^(1|2|25)$ - 然後在你的代碼,你應該檢查,看看這正則表達式匹配\d+並不能匹配這個另外一個,如:

`if($myStr =~ m/\d+/ && !($myStr =~ m/^(1|2|25)$/))` 
0
(?!^1$|^2$|^25$)(^\d+$) 

這應該適合您的情況。

相關問題