正则expression式匹配一个字与唯一的(非重复)字符

我正在寻找一个正则expression式,只有在它的所有字符都是唯一的时候才会匹配,也就是说,这个字中的每个字符只出现一次。

例如
abcdefg – >将返回MATCH
abcdefgbh – >将返回不匹配 (因为字母b重复多次)

试试这个,它可能工作,

 ^(?:([A-Za-z])(?!.*\1))*$ 

说明

 Assert position at the beginning of a line (at beginning of the string or after a line break character) «^» Match the regular expression below «(?:([AZ])(?!.*\1))*» Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» Match the regular expression below and capture its match into backreference number 1 «([AZ])» Match a single character in the range between “A” and “Z” «[AZ]» Assert that it is impossible to match the regex below starting at this position (negative lookahead) «(?!.*\1)» Match any single character that is not a line break character «.*» Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» Match the same text as most recently matched by capturing group number 1 «\1» Assert position at the end of a line (at the end of the string or before a line break character) «$» 

您可以检查string中是否有两个字符的实例:

 ^.*(.).*\1.*$ 

(我只是简单地捕捉其中一个angular色,并检查是否在其他地方有反向引用,剩下的.*就不在意了)。

如果上面的正则expression式匹配,则string具有重复字符。 如果上面的正则expression式不匹配,那么所有的字符都是唯一的。

上面的正则expression式的好处是当正则expression式引擎不支持环顾四周。

显然John Woo的解决scheme是直接检查唯一性的一种很好的方法。 它在每个字符上断言前面的string不会包含当前字符。

这一个也将提供一个完整的匹配任何长度不重复的字母:

 ^(?!.*(.).*\1)[az]+$ 

我稍微修改了@Bohemian提供给另一个问题的答案 。

上面这个问题已经有一段时间了,但是我认为在这里也有这个正则expression式是很好的。