如何在正则表达式重复字符中添加通配符 class

How to add a wildcard in a regexp repeated character class

我正在尝试查看 RE 中是否有一种方法可以表达由一系列给定字母和一个通配符组成的单词的匹配项。

例如,在系统词典中查找包含 C、O、I 和任何其他字母的任意组合的所有单词,以任意顺序,而不重复使用已经匹配的字母,并用完所有提供的字母。所以在这种情况下,RE 需要匹配

coif
coil
coin
coir
foci
icon
loci
rico

也许还有其他我想念的东西。

我不是一个数理逻辑学家,不知道这在正则表达式中是否可行。 它不必完全在正则表达式中完成——如果它使用几个阶段就可以了;它可以在脚本中进行后处理。我找不到像 '^[oci.]*$'(错误)这样的表示甚至开始解决这个问题。

既然你说 It doesn't have to be done entirely in a regexp,这将使用任何 POSIX awk:

awk '/^.{4}$/ && /c/ && /o/ && /i/ && /[^coi]/' file

感谢大家。用循环解决,因此它是可扩展的