0

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

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

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

所以我的问题是,当我有9999xor时它是正确的,而9999x9999x9999x9999x999991:/

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

为了更多的理解,这是widthXheightXdepth'radius.

4

2 回答 2

2

[]字符类。您可能想()改用。

从您之前的问题来看,您想接受表格

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 范围内。因此,您的号码在 start in range 中至少包含一位数字,在 range 中包含1-9十到三位数0-9。你可以把它写成

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

或者改为[0-9]使用\\d(它是相同的 - d 是数字短)


现在尝试将其结合起来,您将获得最终模式。

于 2013-03-25T16:47:46.920 回答
0

尝试/(?:\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也有。

于 2013-03-25T16:34:13.507 回答