这可能与正则表达式有关吗?
例如,在“tagaga”中,我想匹配“aga”,因为它不止一次。
'(.{3})(.*)\1'
找到非重叠匹配(匹配“tagacaga”中的“agacaga”),但不匹配匹配。
然而,以这种方式使用预测对我来说不起作用:
'(.{3})(.*)(?=\1)'
或者,如果正则表达式解决方案不存在,是否有针对此的动态编程解决方案?
最终,我只关心存在而不需要匹配的字符串。我在MATLAB工作,如果它有任何区别。
答案 0 :(得分:1)
这个怎么样:
测试字符串:
tagaga
正则表达式:
(?=(aga)).{2}(?<=.)(\1)
匹配
"aga", "aga"
工作正则表达式示例:
但是如果匹配则取决于长度,即。在您的示例中aga
长度为3,因此您必须将量词修改为长度-1。 (在这种情况下{2}
)。所以..如果您的匹配是abca
,则必须将量词更改为{3}
。
所以使用测试示例:
abcabca
正则表达式:
(?=(abca)).{3}(?<=.)(\1)
匹配
"abca", "abca"
答案 1 :(得分:0)
将先行部分移到中间:
(.+?)(?=(.+?))\1\2
Javascript中的示例:
/(.+?)(?=(.+?))\1\2/.test('asdf') // false
/(.+?)(?=(.+?))\1\2/.test('tagaga') // true
/(.+?)(?=(.+?))\1\2/.test('tagacaga') // false
/(.+?)(?=(.+?))\1\2/.test('agag') // false