正则表达式验证管道分隔项的数量

时间:2009-12-14 16:40:21

标签: regex

我有一个字符串管道'|'分隔。我需要一个正则表达式来根据管道字符验证项目数。所以正则表达式将执行以下操作:

如果最大项目数为3:

asdfasdf | asdfasdf | asdfasdf = VALID

asdfasdf | asdfasdf | asdfasdf | asdfasf =无效

此外,此字符串可能为空。

非常感谢任何帮助

此致

6 个答案:

答案 0 :(得分:7)

^(?:[^|]+(?:\|[^|]+){0,2})?$

这将匹配一个空字符串或最多三个管道分隔的项目,其中一个项目可以是管道以外的任何字符。在这种模式中,每个项目至少需要一个字符;如果您想允许空白项目,请将+更改为* s。

如果您想更改允许的项目数上限,请将{0,2}更改为{0,max-1},其中max是您想要的限制(因为您最多会有max - 1 {1}}字符串中的管道,以使其有效)。

答案 1 :(得分:3)

您使用的是任何编程语言吗?如果是这样,它可能具有特定的功能。如果可以避免的话,使用正则表达式来处理所有字符串是不好的。

PHP:

$items = explode('|', $mystr);
if ($items > $max) failed

的Python:

items = mystr.split('|')
if len(items) > max: failed

答案 2 :(得分:1)

为什么要使用正则表达式?只需迭代字符串并计算每个管道。这实际上正在做正则表达式所做的事情,但不必保持所有的模式匹配bookeeping。

答案 3 :(得分:0)

这里最容易计算|个字符。 E.克。在PowerShell中:

PS> $valid = 'asdfasdf|asdfasdf|asdfasdf'
PS> $notvalid= 'asdfasdf|asdfasdf|asdfasdf|asdfasf'
PS> ($valid.ToCharArray() | where {$_ -eq '|' }).Count -lt 3
True
PS> ($notvalid.ToCharArray() | where {$_ -eq '|' }).Count -lt 3
False

答案 4 :(得分:0)

^[^|]*(?:\|[^|]*){0,2}$

这假设管道之间的项目可能为空。

答案 5 :(得分:0)

^([^|]*\|){0,2}[^|]*$

允许空字符串项目,最多三项,更改02以更改最小/最大范围。