正则表达式,最多只能匹配10个小数位

时间:2017-08-08 14:39:01

标签: java regex

所以我试图编写一个可以匹配以下场景的正则表达式。

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 个答案:

答案 0 :(得分:3)

写简单的正则表达式:

  1. 用文字描述你的模式
  2. 寻找满足您描述的量词,字符类和/或其他标记
  3. 将您找到的所有令牌合并为一行!
  4. 基本上,您的模式可以这样描述:

    1. 字符串的开头
    2. 1到无限数字位数
    3. 一个点
    4. 介于1到10位之间
    5. 字符串的结尾
    6. 我们只是将上述说明翻译成正则表达式:

      1. ^
      2. \d+
      3. \.
      4. \d{1,10}
      5. $
      6. 结合所有这些:

        ^\d+\.\d{1,10}$
        

答案 1 :(得分:0)

试试这个:

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

解释如下:

  
      
  • ^断言字符串开头的位置
  •   
  • [0-9] *随时匹配0(索引48)和9(索引57)之间范围内的单个字符
  •   
  • [。] {0,1}匹配单个字符。最多一次
  •   
  • [0-9] {1,10}匹配1到10次,单个字符在0(索引48)和9(索引57)之间的范围内
  •   

答案 2 :(得分:0)

这应该有效:

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

稍微解构一下:

  • “^”表示从文本行的开头
  • 开始
  • “\ d *”表示任意数量的数字字符(包括零!)
  • “”。意思是文字“。”字符(我们需要先用'\'来逃避它)
  • “\ d {1,10}”表示1到10位数字
  • “\ s”表示任何类型的空白

我建议你看一下https://regexone.com/。一个很好的资源,可以帮助您了解正则表达式的工作原理,它对我帮助很大!