我正在使用开发正则表达式来验证与以下内容匹配的模式:
abc123
Ab3TF56G
BD356-2
abc123(3x4)
Ab3TF56G(24x37)
BD356-2(105x04)
abc123 (3x4)
Ab3TF56G (24x37)
BD356-2 (105x04)
abc123(3x4x10)
Ab3TF56G(24x37x3)
BD356-2(105x04x14)
abc123 (3x4x10)
Ab3TF56G (24x37x3)
BD356-2 (105x04x14)
我在RegEx上表现得非常糟糕,但我正在关注www.regexr.com上的指南,并且到目前为止已经提出了这个问题:
([A-Za-z0-9])\((\d[x^)]\d+)\)+
不幸的是,当我开始尝试考虑可能的破折号和故障时,它就会停止工作。
•字母数字集可以是任意长度
•该序列可以,但不需要破折号后跟整数
•其后也可以是open&带有由“x”字符分隔的整数的近括号(基本上是尺寸)
非常感谢任何帮助。
修改 此外,以下内容应该失败:
abc123 (3x4x10)shs
sdlk234(3x)
sdlk234(3x0)
sdlk234-2 (3x)333
Ab3T F56G
答案 0 :(得分:1)
试试这个:
([a-zA-Z0-9-]+)\s?(\([\dx]+\))?
在此处查看:https://regex101.com/r/pU9oR4/1
以下是图形表示:https://www.debuggex.com/r/uVGo8mrIUYhXHxjP
修改强>
在你不应该匹配的例子后,结果会变得更难,所以你的新模式应该是:
^([a-zA-Z0-9-]+\b)([\s\d-])?(\((?:(?!0)[\d]+)((x(?:(?!0\b)[\d]+))(x(?:(?!0\b)[\d]+))?)\))?$
再次修改 看到它在这里工作:https://www.debuggex.com/r/dxPPbPw0mUKQPRWg
我还添加了验证,因此它不匹配:
sdlk234(3x0x0)
sdlk234(3x1x0)
sdlk234(0x1x1)
遵循维度逻辑
答案 1 :(得分:0)
^[\w-]+\s*(\((?!0\b)\d+(x(?!0\b)\d+)+\))?$
(?!0\b)
:否定前瞻,请确保在0\b
之后
\b
:在字边界处断言位置(^ \ w | \ w $ | \ W \ w | \ w \ W)