Чтобы сделать это с помощью регулярных выражений, вам нужно расширить его на все его возможности:
ab?c?|a?bc?|a?b?c
Если у вас есть предпросмотры, вы можете убедиться, что строка не пустая. Или вы можете проверить, что строка имеет длину по крайней мере один, прежде чем передавать ее в выражение, в зависимости от выбранного вами языка.
Например, .NET прогноз может выглядеть так:
^(?=[abc])a?b?c?$
Или вы можете просто проверить длину строки, прежде чем сопоставить ее:
if (YourString.Length == 1) {
// matching code goes here, using the expression a?b?c?
}