正则表达式为无限字符串

时间:2015-11-25 15:55:06

标签: regex regular-language

我试图弄清楚你是否可以为无限字符串的子串集合赋予正则表达式,例如,如果无限字符串是123123123123123123 ......

会有一个描述这个的正则表达式, 例如我试过(123) |(231) |(312)* 但这不会起作用,因为我需要考虑字符串中的12和23

2 个答案:

答案 0 :(得分:1)

将“无限”字符串定义为同一基本字符串<base>(示例中为123)的无限数量副本的串联。首先观察任何子字符串具有以给定顺序发生的以下部分:

  1. 后缀为<base>或空字符串
  2. 重复<base>
  3. 的0次或更多次
  4. 前缀<base>或空字符串
  5. 正则表达式转换为

    1. 所有<base>后缀的可选替换
    2. Kleene运算符适用于<base>
    3. 所有<base>前缀的可选替换
    4. 具体做法是:

      (23|3)?(123)*(1|12)?
      

      此解决方案明确允许空子字符串。为了排除这种情况,前缀或后缀或中间部分不能为空。这可以通过完整模式的不同变化的替换来实现。

      123|((23|3)(123)*(1|12)?)|((23|3)?(123)*(1|12))
      

答案 1 :(得分:-1)

我认为this is the closest you're going to get with验证&#34;模式。&#34;否则,如果您需要更多可变性,那么您将需要(至少)使用您选择的编程语言来帮助进行中间层处理。

^(?<detectPattern>
  123
  |132
  |213
  |231
  |312
  |321
)\k<detectPattern>*$

使用末尾的引用来编写模式,以便在视觉上解释它在开始时的匹配方式。否则,您可以轻松删除\k<detectPattern>,但保留*

相关问题