[英]Regular expression for a complex string
我是regexp的新手。 我需要驗證一個字符串,但是當我使用當前嘗試時,它總是返回false。
規則:
例如:
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.