2013-08-27 30 views
0

我是新來的正則表達式。我需要驗證一個字符串,但是當我使用我當前的嘗試時,它總是返回false。複雜字符串的正則表達式

規則:

  1. 文本匹配像 「多邊形(())」
  2. 號碼匹配像XY,其中x和y可以是任何雙數
  3. 儘可能多的XY對,通過分離逗號。

如:

PolyGoN((
-74.0075783459999 40.710775696, 
-74.007375926 40.710655064, 
-74.0074640719999 40.7108592490001, 
-74.0075783459999 40.710775696)) 

這裏是我使用的代碼:

String inputString = "POLYGON((-74.0075783459999 40.710775696, -74.007375926 40.710655064, -74.0072836009999 40.710720973, -74.0075783459999 40.710775696))"; 
String regexp = "polygon[\\((][(\\-?\\d+(\\.\\d+)?)\\s*(\\-?\\d+(\\.\\d+)?)]*[\\))]"; 
Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher(inputString); 
boolean result = matcher.matches(); 
+1

你似乎並不瞭解字符類的意思。 –

+0

實際輸入中是否有新行? –

回答

0
m|Polygon\(\(((\s*-?\d+\.\d+\s*){2},)*(\s*-?\d+\.\d+\s*){2}\)\)|i 
+0

這也適用,更簡單,謝謝!但我在表達的開始和結束時並不理解字母m和i。這意味着什麼? – kumar

+0

在某些語言中,m意味着匹配,並且我是一個設置不區分大小寫的標誌。我認爲在Java中,你將它定義爲匹配你使用的函數(而不是替換),並通過特殊的方法傳遞標誌,但我只是以最熟悉的(perl)形式輸入它......隨時根據需要進行調整,使其成爲java。 – gbtimmon

+0

我需要以「X Y」格式(作爲字符串數組)提取重複數字的集合。我使用的是Pattern.compile(「\\ s *((\\ s * - ?\\ d + \\。\\ d + \\ s *){2})」)和一個匹配器,其輸入字符串與以上。迭代循環並使用Matcher.group(1)獲取這些數字。有沒有簡單的方法將它們作爲字符串數組? – kumar

3

[\\((]是規定,你需要(兩次不正確的方法。無論多少次重複一個角色,但是在角色類別[]內,它只會計算一次。因爲,這是一個字符重複你甚至不需要一個字符類,但只有字符\\(與量詞,告訴多少次它應該重複{2}。所以,你需要在開始時需要\\({2},最後需要\\){2}

您使用[]的另一個問題是您使用它們表示一組重複的雙重對(使用*)。您總是使用()來分組您的部分比賽。 []僅表示一個字符類。我想知道爲什麼你錯了,因爲你正確地分組你的雙打和他們的對。

接下來,您忘記匹配所有逗號,分隔雙對。我已經在我的正則表達式中包含了(,\\s*)?。連字符-(或負號在這裏)不需要轉義,因爲它不在字符類[]之內,所以正則表達式解析器知道你沒有使用它來指定字符範圍。

修正正則表達式是(縮進爲清楚起見)

polygon\({2}\s*(
    (-?\d+(\.\d+)?)\s*(-?\d+(\.\d+)?)(,\s*) 
)*(-?\d+(\.\d+)?)\s*(-?\d+(\.\d+)?) 
\s*\){2} 
+0

令人敬畏的解釋拉維。我試過這個,它開始工作了。這是我第一次使用這個網站,並對此感到高興。非常感謝。 – kumar