正则表达式只使用每个字母一次?

gtc*_*caz 5 regex pcre

是否可以构造一个PCRE样式的正则表达式,它只匹配列表中的每个字母一次?

例如,如果您有字母"lrsa",并尝试匹配单词列表:

^[lrsa]*m[lrsa]*$
Run Code Online (Sandbox Code Playgroud)

你要匹配"lams"(有效),还要匹配"喇嘛"(因为你只有一个"a"而无效).如果你的信件是"lrsaa",你会想要匹配"喇嘛".

这是正确的表达式,或者我应该以编程方式处理它?

ZyX*_*ZyX 5

您可以使用负前瞻:

^(?!.*?(.).*?\1)[lrsa]*m[lrsa]*$
Run Code Online (Sandbox Code Playgroud)

会做你想做的