Regex 我可以减少这个Perl正则表达式';s原子&x27;什么是重复?

Regex 我可以减少这个Perl正则表达式';s原子&x27;什么是重复?,regex,Regex,如果可能的话,我想在我的正则表达式中去掉重复的[rat]。可以将其替换为类似\c之类的内容。您正在匹配字符类中的唯一字符。简单地说,输入字符串不应包含第二次出现的已定义字符。只需检查是否发生了相反的情况: ^([rat])(?!\g1)([rat])(?!(\g2|\g1))[rat]$ 或者一次完成,验证字符串是否也遵循^[rat]{3}$规则: ([rat]).*\1 细分: ^断言输入字符串的开头 (?!构建一个负前瞻 *?().*\1查找重复字符 )负前瞻结束 [rat]{3

如果可能的话,我想在我的正则表达式中去掉重复的
[rat]
。可以将其替换为类似
\c
之类的内容。

您正在匹配字符类中的唯一字符。简单地说,输入字符串不应包含第二次出现的已定义字符。只需检查是否发生了相反的情况:

^([rat])(?!\g1)([rat])(?!(\g2|\g1))[rat]$
或者一次完成,验证字符串是否也遵循
^[rat]{3}$
规则:

([rat]).*\1

细分:

  • ^
    断言输入字符串的开头
  • (?!
    构建一个负前瞻
    • *?().*\1
      查找重复字符
  • 负前瞻结束
  • [rat]{3}
    匹配包含已定义字符的3字符长字符串
  • $
    输入字符串的结尾

可能,如果您只需要匹配由非重复的
r
a
t
字符组成的字符串。请您澄清
(?!…)
中发生的情况。如果字符串中有重复字符,则匹配失败。它是否如你所期望的那样工作?它如你所期望的那样工作,但你能在回答中详细说明它吗?因为我不熟悉断言。请参见下面的答案。最后还是一样的模式。
^(?!.*?(.).*\1)[rat]{3}$