在.NET 4.0是什麼了reg前,正則表達式的問題
"^ABC(: ([^=]+(?<!)=(?!)[^,]+(?<!)(,(?!)|$))+)?$"
火柴?
一些示例示例會有很大的幫助。
我對以下結果感到非常驚訝。 上述表達式匹配「ABC:X = 12,Y = 1.79769313486232E + 308」。但它沒有爲「ABC:X = 12,Y = 1,79769313486232E + 308」。唯一的區別是雙數的小數點符號。
謝謝。
在.NET 4.0是什麼了reg前,正則表達式的問題
"^ABC(: ([^=]+(?<!)=(?!)[^,]+(?<!)(,(?!)|$))+)?$"
火柴?
一些示例示例會有很大的幫助。
我對以下結果感到非常驚訝。 上述表達式匹配「ABC:X = 12,Y = 1.79769313486232E + 308」。但它沒有爲「ABC:X = 12,Y = 1,79769313486232E + 308」。唯一的區別是雙數的小數點符號。
謝謝。
看看[^,]
,基本上說,在=(=(?!)
)匹配任何其中沒有,
的東西。
正則表達式是不是真的優雅:
即使像ABC
將匹配。像ABC: X=1Y=1
也會匹配。我會說,不要使用它併爲你需要的東西組裝一個合適的正則表達式。
你說:
上面表達式匹配,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
,這可能不正確。
我很感謝你的回覆。正如你猜對的那樣,問題在於語言環境。西班牙語區域有';'作爲列表分隔符,所以從y值分離x值不是問題。 – dattebayo 2011-06-06 08:09:47
難道你剛纔提供了一個它做什麼和不匹配的例子嗎? – 2011-05-13 14:46:59
它不接受小數的原因可能是[^,]。這可能是X和Y之間的使用。但是,這個RegExp很怪異。 – 2011-05-13 14:48:18