我有以下字符串
abc|ghy|33d
下面的正则表达式匹配正确
^([\d\w]{3}[|]{1})+[\d\w]{3}$
字符串会改变,但是由管道分隔的字符总是在3的...所以我们可以有
krr|455
我们也可以
ddc
以下是问题发生的地方:如果只有一组字母,上面解释的正则表达式与字符串不匹配...即“dcc”
答案 0 :(得分:1)
让我们一步一步地做。
你的正则表达式:
^([\d\w]{3}[|]{1})+[\d\w]{3}$
我们已经可以看到一些变化。 [|]{1}
相当于\|
然后,我们看到你匹配第一部分(aaa |)至少一次(+运算符至少匹配一次)。此外,\w
匹配数字
*运算符匹配0或更多。所以:
^(?:\w{3}\|)*\w{3}$
作品。
请参阅here。
^
匹配字符串的前缀
(?:something)*
匹配零时间或更长时间的内容。由于您不需要,该小组不会被捕获
\w{3}
匹配3个字母数字字符
\|
匹配|
$
匹配字符串的结尾。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以修改您的正则表达式,如下所示:
^([\d\w]{3})(\|[\d\w]{3})*$
此处首先匹配3 alphaNumeric
然后alphaNum with | as prefix.
答案 3 :(得分:0)
你的描述有点尴尬,但我猜你想要匹配
abc
abc|def
abc|def|ghi
你可以用
做到这一点/^\w{3}(?:\|\w{3}){0,2}$/
可视化
解释
^
- 匹配字符串的开头\w{3}
- 匹配[A-Za-z0-9_]
(? ... )?
- 非捕获组,0或1匹配\|
- 文字|
字符$
- 字符串结尾如果目标是匹配任意数量的3个字母的细分,您可以使用
/^(?:\w{3}(?:\||$))+$/