【发布时间】:2015-06-09 17:18:32
【问题描述】:
我需要一个正则表达式来检查是否可以在字符串中找到表达式。
对于字符串“abc”,我想匹配任何排列的第一次出现而不重复,在本例中为 6:abc、acb、bac、bca、cab、cba。
例如,在这个字符串“adesfecabefgswabdcbaes”中,它会在位置 7 处找到一个巧合。
此外,对于没有像“abbc”这样的重复的排列,我也需要相同的方法。这种情况是12:acbb,abcb,abbc,cabb,cbab,cbba,bacb,babc,bcab,bcba,bbac,bbca
例如,在这个字符串“adbbcacssesfecabefgswabdcbaes”中,它会在位置 3 处找到一个巧合。
另外,我想知道类似情况会怎样。
编辑 我不是在寻找排列组合,不。我已经有了这些。我正在寻找的是一种检查这些排列中的任何一个是否在给定字符串中的方法。
编辑 2 我认为这个正则表达式涵盖了我的第一个问题 ([abc])(?!\1)([abc])(?!\2|\1)[abc]
可以在任何字符序列中找到“abc”的所有排列(6)。
现在,当我有 abbc 之类的重复字符(12 种组合)时,我需要这样做。
【问题讨论】:
-
没有重复的无限集合的排列不是常规语言。正则表达式是错误的工具。
-
没有正则表达式运算符来表示“字符串的排列”。您必须计算它们以构建该正则表达式。
-
感谢您的回答,我已经有一个创建所有排列的程序,事实上我确实有这些组合。我需要检查这些组合中的任何一个是否超过 200 万个字符串,我需要检查巧合......这就是我认为正则表达式可能是一个很好的解决方案的原因
-
致重新开放的选民:正则表达式对于这个问题来说是一个糟糕的解决方案。该问题已在重复问题中以更好的方式解决。
-
当您必须检查超过 500 万个组合以查看是否可以匹配 6、12 或 400 个排列中的任何一个时,我可以告诉您正则表达式是最好的解决方案...
标签: regex permutation