【发布时间】:2019-01-16 10:03:14
【问题描述】:
首先,我知道这是一个你通常不会使用正则表达式的问题,我只是想知道这是否可能。
话虽如此,我要做的是匹配字符串的任何排列的所有出现(现在,我不在乎重叠出现是否匹配);例如,如果我有字符串abc,我想匹配所有出现的abc、acb、bac、bca、cab 和cba。
到目前为止,我拥有的是以下正则表达式:(?:([abc])(?!.{0,1}\1)){3}(注意:我知道我可以使用+ 而不是{0,1},但这仅适用于长度为 3 的字符串)。这种工作,但如果有两个排列相邻,其中第一个的字母与第二个的字母太接近(例如abc cba → c c),第一个排列不匹配.是否可以使用正则表达式解决这个问题?
【问题讨论】:
-
将
.替换为[abc]。或至少\S或[^ ]。 -
@WiktorStribiżew 好主意,但这仍然不匹配,例如。
abc中的abcccab... -
([abc])(?!\1)([abc])(?!\1|\2)[abc]?见regex101.com/r/D5OOcD/1 -
@WiktorStribiżew 这也是我考虑的一个选项,但只要我的模式超过 3 个字符(例如
abcd),我就需要显着更改正则表达式;因此,我想知道是否有可能获得一个正则表达式,我真的只需要插入模式及其长度并且它总是有效 -
不,普通的正则表达式是不可能的。
标签: regex