有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

仅匹配最多10位小数的java正则表达式

因此,我正在尝试编写一个正则表达式,它可以匹配以下场景

12.1234 = match
112.12345678901 = wont match
1287729918192.123 = match
123927678281818.19883748383839 = won't match
 23.1829aga = won't match
 1722ahh.98822 = won't match
 1.#$122 = won't match

基本上,它应该只匹配不包含字母或特殊字符的字符串以及小于10位小数的值

我对正则表达式非常陌生,不知道如何实现这一点

谢谢你的帮助


共 (3) 个答案

  1. # 1 楼答案

    试试这个:

    /^[0-9]*[.]{0,1}[0-9]{1,10}$/
    

    解释如下:

    • ^ asserts position at start of the string
    • [0-9]* Match a single character in the range between 0 (index 48) and 9 (index 57) any times
    • [.]{0,1} Match a single character . at max one times
    • [0-9]{1,10} Matches between 1 and 10 times, a single character in the range between 0 (index 48) and 9 (index 57)
  2. # 2 楼答案

    编写简单正则表达式的技巧:

    1. 用语言描述你的模式
    2. 寻找符合您描述的量词、字符类和/或其他标记
    3. 将您找到的所有代币组合成一行

    基本上,您的模式可以这样描述:

    1. 字符串的开头
    2. 1到无限位数
    3. 圆点
    4. 在1到10位之间
    5. 结束

    我们只是将上述描述转换为正则表达式:

    1. ^
    2. \d+
    3. \.
    4. \d{1,10}
    5. $

    并结合所有这些:

    ^\d+\.\d{1,10}$
    
  3. # 3 楼答案

    这应该起作用:

    ^\d*\.\d{1,10}\s
    

    要稍微解构一下这一点:

    • “^”表示从文本行的开头开始
    • “\d*”表示任意数量的数字字符(包括零!)
    • “”意思是字面上的“.”字符(我们需要先用“\”转义)
    • “\d{1,10}”表示数字量介于1和10之间
    • “\s”表示任何类型的空白

    我建议你看看https://regexone.com/。一个优秀的资源,将帮助你了解如何正则表达式的工作,它帮助了我很多