我可以减少这个Perl正则表达式的原子的重复吗?

时间:2018-04-20 12:46:19

标签: regex

^([rat])(?!\g1)([rat])(?!(\g2|\g1))[rat]$

如果可能的话,我想摆脱我的正则表达式[rat]的重复。可以用\c左右替代它。

1 个答案:

答案 0 :(得分:1)

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

([rat]).*\1

或者一气呵成,验证字符串是否遵循^[rat]{3}$规则:

^(?!.*?(.).*\1)[rat]{3}$

Live demo

故障:

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