正则表达式匹配reocurring字符组

时间:2016-10-26 20:58:23

标签: regex pcre regex-group

我试图编写一个匹配正好三个字符组的正则表达式,这个字符集至少在文本中重复出现一次。 我想出的是这个简单的正则表达式:(.{3}).*\g1,使用\ g(全局)和\ s(点也匹配换行符)标志。然而,它显然是错误的,因为它只找到了我希望捕获的一部分组。知道怎样才能改进它?以下是示例输入https://regex101.com/r/Cuiva1/2的链接 编辑:以下是我希望按照评论中的要求捕获的完整列表:GLTVIWIWKKTL,{{1 }},GLTLTKLISKTXTXKXDL

1 个答案:

答案 0 :(得分:0)

如果您的输入始终是大写字符的多个三元组,而您只是在寻找重复的字符,那么您需要更复杂的东西以避免回溯到之前的三元组:

 /(?>[^A-Z]*+([A-Z]{3}))(?=(?:[^A-Z]*+[A-Z]{3})*?\1)|(?>[^A-Z]*+[A-Z]{3})/g

索引1的匹配将保留您想要的内容。如果您的字符串格式不正确(即在重复模式之间可能包含任何长度字符串,那么您可以使用更简单的模式,但是您将获得完全不一致的结果并错过一些匹配。

我重读了你想要的输出,你不会用正则表达式实现这个目标。 VIWIWK重叠,不会在单个preg_match_all()中发挥作用。只需使用字符串函数。