我正在尝试创建一个正则表达式,该名称最多允许50个字符的名称加上最多8个附加字符的版本号。我有一个正则表达式,除了有人要删除名称和版本号之间的空间的情况。这是正则表达式:
^([\w\W]{3,50})(\s\(v[\d]{1,4}\)){0,1}?$
它恰当匹配了这个例子:
acvbg yuleacvbg yuleacvbg yuleacvbg yuleacvbg yule (v9999)
但是,如果我删除附加版本号之间的空格,我就不再有匹配
acvbg yuleacvbg yuleacvbg yuleacvbg yuleacvbg yule(v9999)
如何让这两个例子都有效?
答案 0 :(得分:2)
您可以将空间本身设为可选:
^([\w\W]{3,50})(\s?\(v[\d]{1,4}\)){0,1}?$
^
允许0或1个空格。要允许任意数量的空格(包括无空格),您可以使用*
量词
^([\w\W]{3,50})(\s*\(v[\d]{1,4}\)){0,1}?$
^
此外,[\w\W]
表示"单词字符或非单词字符" ,与任何字符匹配。因此,[\w\W]
可以替换为.
。
最后,表达式末尾的{0,1}
可以简单地省略,因为版本号的可选性已经由?
表示。
因此,表达式可以简化为:
^(.{3,50})(\s*\(v[\d]{1,4}\))?$