RegEx验证:abc123(30x2)及其变体

时间:2015-10-16 00:50:49

标签: regex

我正在使用开发正则表达式来验证与以下内容匹配的模式:

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

2 个答案:

答案 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)

101 Regexp Demo

^[\w-]+\s*(\((?!0\b)\d+(x(?!0\b)\d+)+\))?$

(?!0\b):否定前瞻,请确保在0\b之后

\b:在字边界处断言位置(^ \ w | \ w $ | \ W \ w | \ w \ W)