Java正则表达式空字符串只有数字和。或者,需要的数字

时间:2013-03-15 15:56:46

标签: java regex

到目前为止,我试图在Java中开发一个简单的REGEX而没有成功。这是我想要实现的目标。

  1. 不接受空字符串。在分隔符数字的左侧或右侧需要至少一组数字。 13.被接受; <{1>}也被接受。

  2. 分隔符可能为.13.

  3. 只允许使用一个或零个字符分隔符。

  4. 不允许单独使用不带数字的分隔符。例如,,不允许单独使用。

  5. 我面临的主要问题是如何使分隔符可选。我正在尝试这个:

    .

    这里我试图在字符串的开头指定一个可选的数字列表。稍后,我指定一个分隔符,可以是private final Pattern pattern = Pattern.compile("^[0-9]*.?|,?[0-9]*$"); .,也是可选的。后来,右侧,也是一串数字,也是可选的。这是问题:只有,或空字符串匹配。

    这是我的代码:

    .

1 个答案:

答案 0 :(得分:3)

其中一个问题是,由于运算符优先级

^[0-9]*.?|,?[0-9]*$

基本相同
(^[0-9]*.?)|(,?[0-9]*$)

因此digits.digits不匹配。

[0-9]*表示零或更多,因此.只会匹配。

另请注意,在这种情况下实际上并不需要^$,而是在您使用find()或类似内容时更多。

您想要的更像是:

[0-9]+[.,]?|[0-9]*[.,][0-9]+

[.,]表示., [0-9]+表示一个或更多数字 似乎您熟悉其他语法。

Reference

修改

另请注意,对于数字,您可能不希望00000匹配,尽管未在要求中说明。如下所示:

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

以上内容将匹配0或任何不以可选分隔符左侧零开头的数字(如果分隔符右侧有任何内容,则不会出现任何内容)。