簡體   English   中英

復雜字符串的正則表達式

[英]Regular expression for a complex string

我是regexp的新手。 我需要驗證一個字符串,但是當我使用當前嘗試時,它總是返回false。

規則:

  1. 文本匹配器,例如“ polygon(())”
  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();

[\\\\((]是指定您需要的錯誤方法(兩次。無論您重復一個字符多少次,但在一個字符類中[]它只計數一次。因為,重復相同的字符,甚至不重復一次)這里需要一個字符類,而只是字符\\\\(帶有一個量詞,該量詞告訴它應該重復{2}多少次。因此,您需要在開始時使用\\\\({2} ,在結束時使用\\\\){2}

使用[]另一個問題是,您使用它們來表示一組重復的雙對(使用* )。 您總是使用()將比賽的一部分分組。 []僅表示字符類。 我不知道您為什么會出錯,因為您將雙打和雙打正確地分組了。

接下來,您忘了匹配所有逗號,分隔雙對。 我將其包括為(,\\\\s*)? 在我的正則表達式中。 連字符- (或此處的負號)不需要轉義,因為它不在字符類[] ,因此正則表達式解析器知道您沒有使用它來指定字符范圍。

正確的正則表達式為(為清楚起見,以縮進形式表示)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM