Java中的正则表达式

Java中的正则表达式,java,regex,Java,Regex,这是我第一次使用正则表达式,我发现在根据(x,y,z)(y,z)(x,w)等类型的正则表达式验证字符串时遇到了一些困难。这是我一直试图与字符串匹配的模式 String expressionmatcher = "[\\([[wxyz][,]]*[wxyz]{1,1}\\)]*"; boolean checker = expression.matches(expressionmatcher); if (checker == true) { Syste

这是我第一次使用正则表达式,我发现在根据(x,y,z)(y,z)(x,w)等类型的正则表达式验证字符串时遇到了一些困难。这是我一直试图与字符串匹配的模式

    String expressionmatcher = "[\\([[wxyz][,]]*[wxyz]{1,1}\\)]*";
    boolean checker = expression.matches(expressionmatcher);    

    if (checker == true) {
        System.out.println("Expression Valid");
    }
    else
    {
        System.out.println("Expression is not valid");
    }
虽然接受了我的模式,但匹配器也接受字符串中包含的所有内容,而不考虑序列。例如,如果我输入“x”或“(”或“,”,它将被接受为有效表达式


我该怎么做才能解决这个问题呢?谢谢你,这是因为你在整个东西周围的方括号表示“其中一个内容”——因此,如果某个内容与任何一个内部组匹配,它就会工作

简单的解决方法是用括号替换外括号。还有
[wxyz][,]
周围的括号,因为如果您在不替换我刚才提到的括号的情况下替换外括号(,x)也可以。我相信您可能还希望在外圆括号周围加上一组括号,然后再加上一个
+
——这样,只有在里面至少有一个订单的情况下,您才能匹配

其他几项改进:

  • 你不需要把括号放在一对括号里
  • 你不需要说
    {1,1}
    -
    {1}
    工作得很好
  • 我建议在逗号后加上
    \\s*
    ,这样你就可以在逗号后加空格(或任何形式的空格)

这可能不是你能得到的最有效的正则表达式,因为我对它们不是很有经验。但是它很有效!

@user3182502没问题!不过一定要测试它;不确定我是否得到了所有的角盒。