在字符串中查找最短的重复模式

Ric*_*k T 6 regex matlab octave pattern-matching maple

我想知道是否有办法在Octave/matlab中进行模式匹配?我知道Maple 10有命令这样做但不确定我需要在Octave/Matlab中做什么.因此,如果一个数字是12341234123412341234模式匹配将是1234.我试图找到重复生成整个字符串最短模式.

请注意:数字(仅使用数字)不会这么简单.另外,我不会提前知道这个模式(这就是我想要找到的).请参阅下面的Maple 10示例,该示例显示模式未提前知道,但命令找到模式.

Maple 10模式匹配示例:

ns:=convert(12341234123412341234,string);

             ns := "12341234123412341234"

StringTools:-PrimitiveRoot(ns);

             "1234"
Run Code Online (Sandbox Code Playgroud)

我如何在Octave/Matlab中执行此操作?Ps:我正在使用Octave 3.8.1

Lui*_*ndo 10

要找到重复生成整个字符串的最短模式,可以使用正则表达式,如下所示:

result = regexp(str, '^(.+?)(?=\1*$)', 'match');
Run Code Online (Sandbox Code Playgroud)

一些例子:

>> str = '12341234123412341234';
>> result = regexp(str, '^(.+?)(?=\1*$)', 'match')
result = 
    '1234'

>> str = '1234123412341234123';
>> result = regexp(str, '^(.+?)(?=\1*$)', 'match')
result = 
    '1234123412341234123'

>> str = 'lullabylullaby';
>> result = regexp(str, '^(.+?)(?=\1*$)', 'match')
result = 
    'lullaby'

>> str = 'lullaby1lullaby2lullaby1lullaby2';
>> result = regexp(str, '^(.+?)(?=\1*$)', 'match')
result = 
    'lullaby1lullaby2'
Run Code Online (Sandbox Code Playgroud)

  • OP再次触动我们的心灵和思想混淆我们......从所有这些混乱的灰烬中诞生出一个心灵主义者,其唯一目的是消除带入这个世界的混乱.其他几个人都是从这个事件中产生的,从而创造了......心灵主义者联盟.去心理学家吧! (2认同)