首页 > 解决方案 > 正则表达式允许小数位数,包括 Java 中的 .123 和 123. 等

问题描述

朋友们

我有以下"^[0-9]{1,12}+(\\.[0-9]{1,4})?$"允许以下值的正则表达式

123456789012.1234 这是一个有效的十进制值 {12,4}

123456789012 这是一个有效的整数值等

它不允许像 .1235 等值,我应该如何修改上面的正则表达式,以便它也允许像.123 和 123等值

标签: javaregex

解决方案


我猜,

^(?:[0-9]{1,12}(?:\\.[0-9]{0,4})?|\\.[0-9]{0,4})$

可能有点接近。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

                
        final String regex = "^(?:[0-9]{1,12}(?:\\.[0-9]{0,4})?|\\.[0-9]{0,4})$";
        final String string = "123456789012.1234\n"
             + "123456789012\n"
             + ".1235\n"
             + ".123\n"
             + "123.\n"
             + ".12345\n"
             + "0.12345";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));
            for (int i = 1; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + ": " + matcher.group(i));
            }
        }


    }
}

输出

Full match: 123456789012.1234
Full match: 123456789012
Full match: .1235
Full match: .123
Full match: 123.



如果您希望简化/更新/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您有兴趣,可以在此调试器链接中观看匹配步骤或修改它们。调试器演示了 RegEx 引擎如何逐步使用一些示例输入字符串并执行匹配过程。


正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读