管道分隔值为3个正则表达式的组

时间:2015-05-28 06:20:14

标签: regex

我有以下字符串

abc|ghy|33d

下面的正则表达式匹配正确

^([\d\w]{3}[|]{1})+[\d\w]{3}$

字符串会改变,但是由管道分隔的字符总是在3的...所以我们可以有

krr|455

我们也可以

ddc

以下是问题发生的地方:如果只有一组字母,上面解释的正则表达式与字符串不匹配...即“dcc”

4 个答案:

答案 0 :(得分:1)

让我们一步一步地做。

你的正则表达式:

^([\d\w]{3}[|]{1})+[\d\w]{3}$

我们已经可以看到一些变化。 [|]{1}相当于\| 然后,我们看到你匹配第一部分(aaa |)至少一次(+运算符至少匹配一次)。此外,\w匹配数字 *运算符匹配0或更多。所以:

^(?:\w{3}\|)*\w{3}$

作品。

请参阅here

说明

^匹配字符串的前缀
(?:something)*匹配零时间或更长时间的内容。由于您不需要,该小组不会被捕获 \w{3}匹配3个字母数字字符
\|匹配|
$匹配字符串的结尾。

答案 1 :(得分:0)

^[\d\w]{3}(?:[|][\d\w]{3}){0,2}$

您只需量化变量部分。参见演示。

https://regex101.com/r/tS1hW2/18

答案 2 :(得分:0)

您可以修改您的正则表达式,如下所示:

^([\d\w]{3})(\|[\d\w]{3})*$

此处首先匹配3 alphaNumeric然后alphaNum with | as prefix.

Demo

答案 3 :(得分:0)

你的描述有点尴尬,但我猜你想要匹配

abc
abc|def
abc|def|ghi

你可以用

做到这一点
/^\w{3}(?:\|\w{3}){0,2}$/

可视化

/^\w{3}(?:\|\w{3}){0,2}$/

解释

  • ^ - 匹配字符串的开头
  • \w{3} - 匹配[A-Za-z0-9_]
  • 中的任意3个
  • (? ... )? - 非捕获组,0或1匹配
  • \| - 文字|字符
  • $ - 字符串结尾

如果目标是匹配任意数量的3个字母的细分,您可以使用

/^(?:\w{3}(?:\||$))+$/