我的正则表达式与某个输入不匹配 - java
我使用以下正则表达式:“(?([0-9] +) - ?)+”。我的正则表达式与某个输入不匹配 - java
我试着看看两个数字之间是否有负号。正则表达式应该允许在数字之前使用缺陷,但不能在数字之间使用。
我用下面的命令行输入测试它:“4 6 8 2 5-3 4 3 9”,程序返回它期望返回的内容(true为一个布尔值)。 另外,当命令行输入是:“-4 6 8 2 5 -3 4 3 9”时,程序工作并将假返回到布尔值(预期)。但是,每当我输入:“4 -6 8 2 4月5日至3日3月9日”,程序将显示以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "5-3"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Ex5.main(Ex5.java:32)
这意味着我的布尔是假的,我不知道为什么,因为它应该返回true。
请看看你的(?([0-9]+)-?)+
regex demo:虽然4 -6 8 2 5-3 4 3 9
,-4 6 8 2 5 -3 4 3 9
和4 -6 8 2 5-3 4 3 9
是部分匹配的只有4 6 8 2 5-3 4 3 9
线相匹配的整体利益。
如果您获得false,这意味着您正在使用.matches()
方法。您可以使用
(?: ?-?([0-9]+))+
看到这个regex demo。
为了获得与当前相同的功能,并且如果将它与.matches()
一起使用,您将匹配上面提供的所有四个字符串,而组1将包含最后一批捕获的数字(因为该模式包含重复捕获组,只有最后一个号码将被存储在.group(1)
)。
详细
-
^
(隐含在.matches()
) - 串的开始 -
(?: ?-?([0-9]+))+
- 1个或多个的:-
?
- 任选的空间 -
-?
- 一个可选?
-
([0-9]+)
- 第1组:一个或多个数字
-
-
$
(在.matches()
暗示) - 字符串的结尾
它的效果比上次更差!现在,无论输入什么值,布尔值都是正确的,即使只是“4 5 6 9”“8 63 3” –
@AdrienAacha您还没有解释它应该如何工作。您只抱怨3条线路没有匹配。我解释了为什么,并提出了一个模式。 –
我已经明确地说,如果减号是两个号码而不是在它介于它应返回true一个布尔值只是一些 –
您可以尝试((\ s)\ d +( - \ d? )?)+ 它适用于所有情况。请让我知道是否有任何案件失败。 对于Java代码,你可以使用((\ s)\ d +(\ - ?\ d))+
阿德里安,只是一个提示,而不是把所有的代码中的问题,限制你的单片代码的问题。例如:为什么正则表达式“(?([0-9] +) - ?)+”不匹配输入‘4-6 8 2 4月5日至3日3月9日’ – Doleron
你能使用'布尔hasMinuses = listString.contains(‘ - ’)'如果是这样,这将节省您的调试。正则表达式 – dave
哦,不,我不能,我想允许 - 但只有当它的一些 –