我试过这个:
[a]?[b]?[c]?[d]?[e]?[f]?[g]?[h]?[i]?[j]?[k]?[l]?[m]?[n]?[o]?[p]?[q]?[r]?[s]?[t]?[u]?[v]?[w]?[x]?[y]?[z]?
但是这个RegEx拒绝字符串,其中的顺序不是按字母顺序排列的,如下所示:
我希望这两种模式也被接受。我怎么能这样做?
编辑1
我不想重复字母,即我希望拒绝以下字符串:
感谢。
答案 0 :(得分:2)
您可以使用negative lookahead assertion确保没有两个字符相同:
^(?!.*(.).*\1)[a-z]*$
<强>解释强>
^ # Start of string
(?! # Assert that it's impossible to match the following:
.* # any number of characters
(.) # followed by one character (capture that in group 1)
.* # followed by any number of characters
\1 # followed by the same character as the one captured before
) # End of lookahead
[a-z]* # Match any number of ASCII lowercase letters
$ # End of string
注意:此正则表达式需要强制检查所有可能的字符对,因此性能可能是较大字符串的问题。如果你可以使用除了正则表达式之外的任何东西,你会更快乐。例如,在Python中:
if re.search("^[a-z]*$", mystring) and len(mystring) == len(set(mystring)):
# valid string