正则表达式可选空间解决方案

时间:2014-12-01 21:12:07

标签: regex

我正在尝试创建一个正则表达式,该名称最多允许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)

如何让这两个例子都有效?

1 个答案:

答案 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}\))?$