用perl5的规则
String regex =
"\\s*([\u4e00-\u9fa5]{2,10})\\s+([\u4e00-\u9fa5]{2,10})\\s+(\\d*.?\\d{1,2})\\s*"这个可以表示什么?  哪个高手给解释一下啊

解决方案 »

  1.   

    这个正则表达式可能想提取2段汉字,接1个带最多2位小数的数字
    但这样写有问题\s*    空白字符(空格 制表位) 0个或多个
    [\u4e00-\u9fa5]{2,10} 汉字 2个至10个
    \s+    空白字符 1个或以上
    \d*    数字0个或多个
    .?     任何字符(不含换行) 0个或1个(.不是表示小数点,而是表示任何字符)
    \d{1,2} 数字1个或2个
      

  2.   

    带两位小数的数字这样写也有问题
      (\\d*.?\\d{1,2})
    应改为
      (\\d+\\.\\d{1,2})如果是数字,可以不带小数,或带1-2位小数,应改为
      (\\d+(?:\\.\\d{1,2})?)
      

  3.   

    听君一席话,  又得省我十本书啦
    xxxx
      

  4.   

    另外(\\d+(?:\\.\\d{1,2})?) 中的:代表什么? 是笔误么?
    我所说的这个(\\d*.?\\d{1,2}) 只让它识别一定带2位小数的数字,应该也可以吧?
    比如它的数字格式都是十进制xx.xx的形式。
    在这里*可以换成也可以不换成+,  而对于?,可以有它(?)也可以没有它,我这样理解对么?
      

  5.   

    1. (?:) 是表示在捕获匹配项忽略对该匹配项的保存, 此处可直接写为(\\d+(\\.\\d{1,2})?), 因为你的要求不涉及匹配项的捕获
    2. (\\d*.?\\d{1,2}) 识别带2位小数的数字是不行的, 因为.不是表示小数点,而是表示任何字符, 1-23 或 1+23 或 1023 都符合该正则表达式,但显然不是带2位小数的数字
    3. (\\d*.?\\d{1,2})不换成+号  得看你怎么定义数字, .23 符合该正则表达式, 且java oracle均可识别这样的数字, 但用户可能会认为这不是数字