我的正则表达式模式中的java错误理解
你好,我的模式有问题[\\d{1,4}]{1,3}+[x?]{0,2}+[\\'?\\d{1,4}]
该模式必须检查测量系统是否正确输入
最大的字符串可能是9999x9999x9999'9999
,并且永远不会在末尾有x
,但也只能是'9999
,因为这意味着半径
所以我的问题是当我有9999x
或9999x9999x9999x9999x99999
时它是正确的,当1
时它是错误的:
我不明白为什么1
是假的,以及如何限制每个x
后面的x
和整数
欲了解更多信息,请点击^{
# 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 楼答案
[]
是character class。你可能想改用()
从你的previous question判断你想接受表格
而且
因此,您的模式必须明确地接受一个
Int
和可选的最多两个x Int
,然后可选地' Int
你可以这样做
或者使用
?
标记代替{0,1}
现在你说
Int
在1-9999范围内。 因此,您的数字在起始处至少包含一位1-9
范围内的数字,在起始处至少包含十位0-9
范围内的数字,最多包含三位。你可以把它写成或者改为
[0-9]
使用\\d
(这是一样的-d是数字的缩写)现在试着把这些结合起来,你就会得到最终的图案