我试图弄清楚你是否可以为无限字符串的子串集合赋予正则表达式,例如,如果无限字符串是123123123123123123 ......
会有一个描述这个的正则表达式, 例如我试过(123) |(231) |(312)* 但这不会起作用,因为我需要考虑字符串中的12和23
答案 0 :(得分:1)
将“无限”字符串定义为同一基本字符串<base>
(示例中为123
)的无限数量副本的串联。首先观察任何子字符串具有以给定顺序发生的以下部分:
<base>
或空字符串<base>
<base>
或空字符串正则表达式转换为
<base>
后缀的可选替换<base>
<base>
前缀的可选替换具体做法是:
(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>
,但保留*
。