正则表达式将{1,2,3}的所有排列与中间重复匹配。例如:122223

我需要一个正则表达式,它将搜索数字的所有排列(1、2、3),其中中间的数字将出现一次或多次。

例如:

  • 123
  • 133332
  • 21111113
  • 312
  • 13333332
  • 我试过这个表达式:

    ([1][2]+[3])|([1][3]+[2])|([2][1]+[3])|([2][3]+[1])|([3][2]+[1])|([3][1]+[2]))
    

    不幸的是,它很慢,有没有办法使它更有效?

    评论
    正经人
    正经人

    您可以使用

    ([1-3])(?!\1)([1-3])\2*(?!\1|\2)[1-3]
    

    See the regex demo

    细节

    • ([1-3]) - Group 1: 1, 2 or 3
    • (?!\1)([1-3])\2* - a digit from 1 to 3 not equal to Group 1 value and then 0+ occurrences of the digit
    • (?!\1|\2)[1-3] - a digit from 1 to 3 not equal to Group 1 and 2 value

    In case you need to match the whole string, add ^ at the start and $ at the end of the pattern.

    点赞
    评论