2011-05-13 39 views
0

在.NET 4.0是什麼了reg前,正則表達式的問題

"^ABC(: ([^=]+(?<!)=(?!)[^,]+(?<!)(,(?!)|$))+)?$" 

火柴?

一些示例示例會有很大的幫助。

我對以下結果感到非常驚訝。 上述表達式匹配「ABC:X = 12,Y = 1.79769313486232E + 308」。但它沒有爲「ABC:X = 12,Y = 1,79769313486232E + 308」。唯一的區別是雙數的小數點符號。

謝謝。

+2

難道你剛纔提供了一個它做什麼和不匹配的例子嗎? – 2011-05-13 14:46:59

+2

它不接受小數的原因可能是[^,]。這可能是X和Y之間的使用。但是,這個RegExp很怪異。 – 2011-05-13 14:48:18

回答

1

看看[^,],基本上說,在=(=(?!))匹配任何其中沒有,的東西。

正則表達式是不是真的優雅:

即使像ABC將匹配。像ABC: X=1Y=1也會匹配。我會說,不要使用它併爲你需要的東西組裝一個合適的正則表達式。

0

你說:

上面表達式匹配,ABC:X = 12,Y = 1.79769313486232E + 308" ABC但它不能爲」:X = 12,Y = 1,79769313486232E + 308 「

沒有任何背景,我不知道什麼匹配上面的字符串的目的,但我可以看到爲什麼它會是完全合法的,以配合第一,但不是第二。

的格式1.79769313486232E+308是一個非常大的數字(+3)的科學記數法08基本上是指將小數點308位移到右邊)。這是一個帶點的合法數字,但不包含逗號。

確實,某些語言環境可能使用逗號作爲十進制字符而不是點,但科學記數法標準化爲使用點,因爲編程語言和其他計算機應用程序會使用此格式的數字,所以強制它成爲點並防止使用逗號是合法的。

爲了說明爲什麼這很重要,如果在這個例子中允許使用逗號,那麼它會對Y的值結束時產生歧義,因爲逗號已經被用來顯示值的結尾X,使用逗號代替Y中的點可能會使計算機認爲Y的值爲1,這可能不正確。

+0

我很感謝你的回覆。正如你猜對的那樣,問題在於語言環境。西班牙語區域有';'作爲列表分隔符,所以從y值分離x值不是問題。 – dattebayo 2011-06-06 08:09:47