正则表达式接受错误的字符串

时间:2014-01-12 14:03:40

标签: java regex

我做了一个正则表达式,这是它的一部分:

"[[+31|0]2[[0-9]{2}|0]+]+|"+    //+312** / +3120 / 02** / 020 ERROR: 0800?

正如您所看到的,想要的输出是例如+312或+3120或02 .. 但我的问题是正则表达式也接受0800和0900。我不想要的。我也没有任何线索,为什么它接受它,因为正则表达式中有2。

我粘贴的部分是正则表达式的一小部分,这是错误的。 任何人都可以帮我解决这个问题吗?

编辑: 这是我的完整正则表达式

                "(([+31]+|[31]+|"+              //+31 / 31
            "[[+31|0]2[[0-9]{2}|0]+]+|"+    //+312** / +3120 / 02** / 020 ERROR: 0800?
            "[[+31|0]6]+"+                  //+316 / 06
            ")[-]?"+                        // - / ..
            "[0-9]{3,8})|"+                 //einde van nummer.
            "(112)";                        //112

它接受0800-1234它不应该。第二条规则是批准它。

1 个答案:

答案 0 :(得分:4)

您可以互换使用方括号和括号。他们是不同的。 []环绕字符类。 ()围绕子表达式。

根据你的正则表达式,修复的第一步是:

((\+31|0)2([0-9]{2}|0)+)+

http://fiddle.re/44t12