Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式内部数字检查_Java_Regex_String_Pattern Matching_Regular Language - Fatal编程技术网

Java 正则表达式内部数字检查

Java 正则表达式内部数字检查,java,regex,string,pattern-matching,regular-language,Java,Regex,String,Pattern Matching,Regular Language,我有以下正则表达式,但它失败了(带点的内部数字): 我希望它涵盖以下情况: 123有效 123.4有效期 123.44有效 123.445有效期 123.33.3不正常(正则表达式验证为真) 123.3.3不正常(正则表达式将其验证为真) 123.333.3有效期 123.333.34有效期 123.333.344有效期 你能帮帮我吗 如果您有多个case,我将使用以下or运算符: ^([0-9]{1,3}|[0-9]{1,3}\.[0-9]{1,3}|[0-9]{1,3}\.[0-9]{3

我有以下正则表达式,但它失败了(带点的内部数字):

我希望它涵盖以下情况:

  • 123有效
  • 123.4有效期
  • 123.44有效
  • 123.445有效期
  • 123.33.3不正常(正则表达式验证为真)
  • 123.3.3不正常(正则表达式将其验证为真)
  • 123.333.3有效期
  • 123.333.34有效期
  • 123.333.344有效期

你能帮帮我吗

如果您有多个case,我将使用以下or运算符:

^([0-9]{1,3}|[0-9]{1,3}\.[0-9]{1,3}|[0-9]{1,3}\.[0-9]{3}\.[0-9]{1,3})$
^           ^                      ^                                 ^
你可以查一下


细节 正则表达式匹配三种情况:

案例1

[0-9]{1,3}
这将匹配一个或多个数字

案例2

[0-9]{1,3}\.[0-9]{1,3}
这将匹配一个或多个数字,后跟一个点,然后匹配一个或多个数字

案例3

[0-9]{1,3}\.[0-9]{3}\.[0-9]{1,3}
这将匹配一个或多个数字,然后是一个点,然后是三个数字,然后是一个点,然后是一个或三个数字

注意:您可以将
[0-9]
替换为
\d
您的正则表达式可以是:

^(\d{1,3}|\d{1,3}\.\d{1,3}|\d{1,3}\.\d{3}\.\d{1,3})$
这个怎么样(演示在)。这是一个非常简单明了的正则表达式:

(^\d{3}\.\d{3}\.\d{1,3}$)|(^\d{3}\.\d{1,3}$)|(^\d{3}$)
这将识别三个有效的独立组

  • (^\d{3}\.\d{3}\.\d{1,3}$)
    作为一个组,必须有3个数字、一个点、3个以上数字、一个点和1-3个数字
  • (^\d{3}\.\d{1,3}$)
    作为一个组,必须有3个数字、一个点和1-3个数字
  • (^\d{3}$)
    作为一个必须有1-3位数字的组
这些组使用
|
)语句拆分


然而,既然您已经标记了,为什么不让Java承担一些责任,在不强大的地方帮助Regex呢?我希望匹配格式
((?:\d{1,3}\.?)+)
,并以编程方式检查数字计数是否有效。

使用以下表达式与
匹配:

s.matches("\\d{1,3}(?:\\.\\d{3})?(?:\\.\\d{1,3})?")

详细信息

  • ^
    -隐式,不需要,因为模式用于需要完整字符串匹配的
    匹配中
  • \d{1,3}
    -1到3位数字
  • (?:\。\d{3})?
    -可选的
    和3位数字
  • (?:\。\d{1,3})
    -可选的
    和1到3位数字序列
  • $
    -隐式,不需要,因为模式用于需要完整字符串匹配的
    .matches

为什么
123.33.3
123.3.3
不正常?好吧,如果一个三位数字符串中的第二个数字应该有三位数,试试我发布的。那么,它有效吗?是的,你所有的Anwser都有效!非常感谢。这正是我需要的!非常感谢您的详细解释。哇,你对正则表达式很在行!我真的很坏,是个傻瓜。。。。再次感谢你!这也是我需要的!感谢您的大力帮助和演示。我在java代码中使用这个正则表达式,我想我只是编写了一个“简单”(xaxaxa)正则表达式。我通常使用其他方法(子字符串等)。。。主要是因为我不喜欢正则表达式。。。
s.matches("\\d{1,3}(?:\\.\\d{3})?(?:\\.\\d{1,3})?")