gpt4 book ai didi

java - 我的正则表达式与某个输入不匹配 - java

转载 作者:行者123 更新时间:2023-11-30 06:27:39 26 4
gpt4 key购买 nike

我使用以下正则表达式:“(?([0-9]+)-?)+”。

我尝试查看两个数字之间是否有减号字符。正则表达式应该允许数字之前有减号,但数字之间不允许有减号。

我使用以下命令行输入对其进行测试:“4 6 8 2 5-3 4 3 9”,程序返回预期返回的内容( boolean 值为 true)。另外,当命令行输入为:“-4 6 8 2 5 -3 4 3 9”时,程序将运行并向 boolean 值(预期)返回 false。但是,每当我输入:“4 -6 8 2 5-3 4 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)

这意味着我的 boolean 值是假的,我不知道为什么,因为它应该返回 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 94 -6 8 2 5-3 4 3 9 部分匹配。

如果您得到false,则意味着您正在使用.matches()方法。您可以使用

(?: ?-?([0-9]+))+

查看此regex demo .

要获得与当前相同的功能,如果将其与 .matches() 一起使用,您将匹配上面提供的所有四个字符串,并且第 1 组将包含最后一个数字 block 捕获(由于模式包含重复的捕获组,因此只有最后一个数字将存储在 .group(1) 中)。

详细信息

  • ^(在 .matches() 中隐含)- 字符串开头
  • (?: ?-?([0-9]+))+ - 出现 1 次或多次:
    • ? - 可选空格
    • -? - 可选的 ?
    • ([0-9]+) - 第 1 组:一位或多位数字
  • $(在 .matches() 中隐含)- 字符串结尾

关于java - 我的正则表达式与某个输入不匹配 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46801152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com