我是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();
答案 0 :(得分:3)
[\\((]
是指定您需要(
两次的错误方法。无论你重复一个角色多少次但在一个角色类[]
内,它只计算一次。因为它是同一个字符重复你甚至不需要一个字符类,只有字符\\(
有一个量词,告诉它应该重复多少次{2}
。因此,您需要在开始时\\({2}
和最后\\){2}
。
使用[]
的另一个问题是,您使用它们来表示一组重复的双对(使用*
)。您始终使用()
对匹配的一部分进行分组。 []
仅表示字符类。我想知道为什么你错了,因为你正确地分组你的双打和他们的对。
接下来,您已忘记匹配分隔双对的所有逗号,
。我在我的正则表达式中将(,\\s*)?
包括在内。连字符-
(或此处的否定符号)不需要转义,因为它不在字符类[]
内,因此正则表达式解析器知道你的错误不使用它来指定字符范围。
更正的正则表达式是(为了清晰起见,缩进)
polygon\({2}\s*(
(-?\d+(\.\d+)?)\s*(-?\d+(\.\d+)?)(,\s*)
)*(-?\d+(\.\d+)?)\s*(-?\d+(\.\d+)?)
\s*\){2}
答案 1 :(得分:0)
m|Polygon\(\(((\s*-?\d+\.\d+\s*){2},)*(\s*-?\d+\.\d+\s*){2}\)\)|i