有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我的正则表达式模式中的java错误理解

你好,我的模式有问题[\\d{1,4}]{1,3}+[x?]{0,2}+[\\'?\\d{1,4}]

该模式必须检查测量系统是否正确输入

最大的字符串可能是9999x9999x9999'9999,并且永远不会在末尾有x,但也只能是'9999,因为这意味着半径

所以我的问题是当我有9999x9999x9999x9999x9999x99999时它是正确的,当1时它是错误的:

我不明白为什么1是假的,以及如何限制每个x后面的x和整数

欲了解更多信息,请点击^{


共 (2) 个答案

  1. # 1 楼答案

    试试/(?:\d{1,4}x\d{1,4}x\d{1,4})?'\d{1,4}/

    您也可以将第一个模式组合成(?:(?:\d{1,4}x){2}\d{1,4})?,但我认为第一个更具可读性

    您不必要地使用了字符类(括号中的部分,[]

    另外,假设(x,y,z)三元组必须完全定义或完全不存在,那么x?并不是在做你想做的事情,因为如果你有数字,你也必须有x

  2. # 2 楼答案

    []character class。你可能想改用()

    从你的previous question判断你想接受表格

    Int
    Int x Int
    Int x Int x Int
    

    而且

    Int ' Int
    Int x Int ' Int
    Int x Int x Int ' Int
    

    因此,您的模式必须明确地接受一个Int和可选的最多两个x Int,然后可选地' Int

    你可以这样做

    Int( x Int){0,2}(' Int){0,1}     
    

    或者使用?标记代替{0,1}


    现在你说Int在1-9999范围内。 因此,您的数字在起始处至少包含一位1-9范围内的数字,在起始处至少包含十位0-9范围内的数字,最多包含三位。你可以把它写成

    [1-9][0-9]{0,3}
    

    或者改为[0-9]使用\\d(这是一样的-d是数字的缩写)


    现在试着把这些结合起来,你就会得到最终的图案