正则表达式验证字符串

时间:2011-09-29 16:33:25

标签: regex xsd

我正在尝试验证需要使用正则表达式的xsd中的字符串。该字符串将采用以下形式......

JOE〜PETE〜SAM〜BOB

以下内容被视为有效......

JOE
~PETE
JOE~SAM~
~~~BOB
JOE~PETE~~

另外,〜之间的每个名称最多只能是6个字符(或数字),最多只能有4个名字。

我现在正在尝试的正则表达式是......

[0-9A-ZA-Z] {0,6} [〜] {0,1} | [0-9A-ZA-Z] {0,6} [〜] {1} [0-9A -Za-Z] {0,4} [〜] {0,1}

但我想知道他们是否是更好的解决方案。

注意:我应该进一步澄清......如果只允许4个名字,那意味着最多只允许3个。波浪号表示位置,因此如果发生了~~~ BOB,则表示位置1,2和3为空,第4位被BOB占用。另外,如果你有JOE ~~~,JOE位于第一个位置,其余为空。零个或多个名称可以位于4个位置中的任何一个。此外,允许使用。,*,空格等符号。

3 个答案:

答案 0 :(得分:1)

这个怎么样?

^(~*\b[0-9a-zA-Z]{1,6}\b~*){0,4}$

假设名称之间,之前和之后~的数量没有限制。

\b转义序列与单词之间的“边框”匹配 - 即任何字母数字和任何非字母数字字符之间的空格。

此外,专业提示:\w转义序列与[0-9a-zA-Z]匹配的内容相同。上述正则表达式可以缩短为:

^(~*\b\w{1,6}\b~*){0,4}$

答案 1 :(得分:1)

我认为这就是你所得到的

^[^~]{0,6}(~[^~]{0,6}){0,3}$

答案 2 :(得分:0)

空字符串是否有效?那些仅由波浪形组成的弦乐呢?如果是这样,以下内容将起作用:

^([0-9a-zA-Z]{0,6}~?){0,4}$