Java正则表达式错误

时间:2013-05-09 13:24:25

标签: java regex

我有以下正则表达式:

^(MIN|MAX|SUM|AVERAGE):[(\\d+(\\.\\d+)?), ]+$

我试图实现的规则应仅允许使用以下格式的字符串:

OPERATION: (comma separated list of integers or real numbers)

例如,必须允许以下内容:

MIN: 7, 89.7, 67
AVERAGE: 67.9, 89, 9

但是,它接受表格

的输入
MAX: , 

如何避免逗号两边的空格被接受?

5 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式

^(MIN|MAX|SUM|AVERAGE):\s*\d+(\.\d+)?(\s*,\s*\d+(\.\d+)?)*$

答案 1 :(得分:1)

字符类不能像正在尝试的那样包含正则表达式构造。

这与其他答案略有不同,导致较小的正则表达式:

(MIN|MAX|SUM|AVERAGE): \\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*

不需要前导和尾随^$ - 它们是隐含的。

使用:

if (str.matches("(MIN|MAX|SUM|AVERAGE): \\d+(\\.\\d+)?(, \\d+(\\.\\d+)?)*") {
    // yes, format is OK
}

答案 2 :(得分:0)

尝试

"^(MIN|MAX|SUM|AVERAGE)\\s?:\\s?(\\d+(\\.\\d+)?)(,\\s?\\d+(\\.\\d+)?)*$"

试验:

MIN:4: true
MIN:4,4: true
MIN:4, 5: true
MIN:4 , 5: false
MIN: 7, 89.7, 67: true
AVERAGE: 67.9, 89, 9: true
MAX: , : false

答案 3 :(得分:0)

这将接受您的任何“操作”,“:”符号和任何数字/点,逗号分隔,在第一个数字之前或之后有逗号或空格。 它还会阻止您的行以逗号结尾。

Pattern pattern = Pattern.compile("^(MIN|MAX|SUM|AVERAGE):\\s?(\\d+?(\\.\\d+?)?,?\\s?)+?\\d$");

答案 4 :(得分:-1)

你的模式中有一个空格,所以你必须稍微调整一下,最快的改动就是这样,这样你的列表元素之间仍然可以有空格:

"^(MIN|MAX|SUM|AVERAGE):[(\d+(\.\d+)?)][(\d+(\.\d+)?), ]+$"