2012-03-09 120 views
-1

我想學習正則表達式,並希望有人能幫助我。希望如果有人能幫助我拿出一個正則表達式來驗證輸入的形式必須是輸入驗證的正則表達式

Graph: XY5, YZ4, ST7 

每個部分如XY5表示在圖中的邊和所述數字表示邊的權重的。可以有任何數量的這種邊緣。

這是我到現在爲止。這可能是不正確的

"^Graph:\\s{1}[A-ZA-Z\\d,\\s]+" 
+3

「這可能是不正確的」 - 你真的嘗試嗎? – 2012-03-09 21:04:13

+0

是的,我做到了。它說我的輸入相符,但我無法令人信服地解釋它。所以這就是我說我做了什麼的原因。不明確的道歉。 – Satyam 2012-03-09 21:09:51

+0

@deathApril - 那根本就是錯的。在括號內,'0-9'和'\ d'完全相同。但是,由於他有很多其他的東西,所有這些東西都是可選的:'/ [a-z \ d] /'會匹配一個字符或一個數字,但絕對不是斜線! – 2012-03-09 21:16:36

回答

1

這可能是你在找什麼:

/^Graph: (?:[A-Z]{2}\d(?:$|, ?))+/ 

在這裏看到它在行動:http://regexr.com?309av


這裏的正則表達式做什麼(截圖來自RegexBuddy的解釋,這是如果你想學習正則表達式,可能是最好的工具):

enter image description here

+0

爲「試圖學習」,「(?:aaa)'[關閉捕捉反向引用](http://www.regular-expressions.info/brackets.html)和在所有語言中都不支持... – Aprillion 2012-03-09 21:19:34

+0

您是否認爲將$放在最後?所以它不會匹配'Graph:XY5,'from'「Graph:XY5,something incorrect」' – Aprillion 2012-03-09 21:33:32

+0

@deathApril - 正在考慮它,但OP的要求太模糊了,所以我不確定他是否想要以匹配。 – 2012-03-09 21:46:48

0

你應該更好地解釋你的輸入格式。這可以做到這一點,從我的單一例子和你說的。它不允許圖表爲空,這可能會或可能不會成爲您的要求的一部分。

"^Graph:(\s\w{2}\d+,?)+" 

解釋:

^Graph:將覆蓋線

(\s\w{2}\d+,?)+ 

\s的開始是一個空格

\w{2}比賽正好2個字母數字字符(提示:你可以把這個更好!)

\d+匹配1個或多個數字,因爲我假設邊緣可以有兩位數的長度(如10)

,?可選地匹配逗號。 (提示:你可以做得更好,因爲它不會在每個條目之間使用逗號,也許通過使用or和字符串分隔符的末尾!)

我特意留下了一些改進空間,因爲如果你自己想一些它,你會實現你的目標,使用正則表達式變得更好。

0

試試這個

/^Graph:(\s+[A-Z][A-Z]\d+)+$/