gpt4 book ai didi

java - 正则表达式无法使特殊结构 (?=x) 起作用

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

我正在尝试获取一个有效的正则表达式以在验证以下格式的 java (java.util.regex) 中使用:

最多 15 位的数字,其中 MAX 3 位可以是小数,前面有分隔符 (,)

所以,有效的是:

123456789012345  (15 digits, ok)
12345678901234,1

[编辑],这些也应该有效:

1234567890123,45
123456789012,345

到目前为止,我已经想出了以下正则表达式模式:

Pattern = [0-9]{1,15}(\,[0-9]{1,3})?

这会检查 1 到 15 位数字的范围,后跟一个可选的分隔符,然后是另外 3 位数字。但是,这不会检查输入的总长度。使用此正则表达式,值 123456789012345,123 将是有效的。

所以,我想我应该添加一个额外的表达式来检查总长度,并使用“(?=”构造来模拟逻辑 AND 行为。

所以我开始将其添加到我现有的正则表达式中,如下所示:

Pattern = (?= [0-9]{1,15}(\,[0-9]{1,3})?)

然而,这基本上导致我向它抛出的所有东西都失败了,而且我无法让它进一步工作。我不明白我在这里做错了什么?在此工作之后,我将添加另一个表达式来检查总长度,我认为类似于 (?=.{16})。

最佳答案

[编辑]意识到如果有 ,,您想要接受总长度为 16,而且您实际上不需要在这里使用 lookaround,因为您只有两种情况。这很好用:

public static boolean isValid(String input) {
return input.matches("^(\\d{0,15}|\\d{1,12},\\d{1,3})$");
}

如果其中之一为真,则返回有效

  • 输入由 0-15 个数字组成
  • 输入由 1-12 个数字组成,后面是 ,,然后是 1-3 个数字

[EDIT2]

好的,新的尝试:

public static boolean isValid(String input) {
return input.matches("^(\\d{0,15}|(?=.{3,16})\\d+,\\d{1,3})$");
}

如果其中之一为真,则返回有效

  • 输入由 0-15 个数字组成
  • 输入由 3-16 个字符组成,至少由一位数字组成,后跟 ,,再后跟 1-3 个数字

关于java - 正则表达式无法使特殊结构 (?=x) 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11467604/

27 4 0
文章推荐: ios - 如何使应用程序(使用用户名/密码登录)知道用户已登录?
文章推荐: javascript - 如何使用chrome浏览数据javascript api?
文章推荐: ios - Swift youtube ios helper 全屏抛出异常
文章推荐: 当嵌套在动态添加的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com