求一个正则表达式1-10之间 要求 是 可以为1或者10,并且只允许小数点后一位,比如5.5。但5.55就不行

要求 是 可以为1或者10,并且只允许小数点后一位,比如5.5。但5.55就不行

优化 @jmy1980的代码


import java.util.regex.Pattern;
public class test
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("^([1-9](\\.\\d)?)|(10)$");
        System.out.println("0" + p.matcher("0").matches());
        System.out.println("1" + p.matcher("1").matches());
        System.out.println("1.1" + p.matcher("1.1").matches());
        System.out.println("1.11" + p.matcher("1.11").matches());
        System.out.println("10" + p.matcher("10").matches());
    }
}
 ^([1-9](\.\d)?|10)$

分成两步处理,一个大小判断,1 < x < 10之间
第二步就是正则判断小数点是否只有一位。

  \d+\.\d{1}

(10(.|.0)?)|(0.([1-9]?))|(1-9?)

^(1-9?|10)$

/^[1-9]|10|[1-9]\.[0-9]$/

^(1-9?)|(10)$

 Pattern p = Pattern.compile("^([1-9](\\.\\d)?)|(10)$");
        System.out.println("0"+p.matcher("0").matches());
        System.out.println("1"+p.matcher("1").matches());
        System.out.println("1.1"+p.matcher("1.1").matches());
        System.out.println("1.11"+p.matcher("1.11").matches());
        System.out.println("10"+p.matcher("10").matches());

结果:

 0false
1true
1.1true
1.11false
10true

上贴拷贝有问题,代码为准。

  Pattern p = Pattern.compile("^([1-9](\\.\\d)?)|(10)$");
    System.out.println("0"+p.matcher("0").matches());
  System.out.println("1"+p.matcher("1").matches());
  System.out.println("1.1"+p.matcher("1.1").matches());
  System.out.println("1.11"+p.matcher("1.11").matches());
        System.out.println("10"+p.matcher("10").matches());

结果:

 0false
1true
1.1true
1.11false
10true

(10(.|.0)?)|(0.([1-9]?))|(1-9?),,,

/^(1-9)((.\d)?||(10))$/

if [[ "$1" =~ ^(1-9?|10)$ ]];then
echo "ok"
fi

10(.0)?|1-9?
这个可以吧 整数部分为1-9,后面可以接小数点和一位小数。或者可以为10和10.0,符合楼主的要求

 10(\.0)?|[1-9](\.\d)?

这个可以吧 整数部分为1-9,后面可以接小数点和一位小数,或者可以为10和10.0,符合楼主的要求。(上一条回答为什么会自动去掉反斜杠和中括号了)

/^(1-9)((.\d)?||(10))$/.