Регулярное выражение для сопоставления отсортированных слов и хотя бы одного

Я хотел бы знать, существует ли более простой способ сопоставления для последовательности слов, где хотя бы одно является обязательным.

Чтобы упростить ситуацию, представьте, что мои слова - это A, B и C. Я хочу иметь совпадение для A, B, C, AB, BC, AC, но для CA это будут C и A как отдельные совпадения, порядок важный. Отсюда и появилась первая идея:

A?B?C?

Единственная проблема, которую я обнаружил, состоит в том, что она также совпадает с пустой строкой, и я получил недопустимые совпадения. То, что я хочу, это какой-то более простой способ сделать:

(AB?C?|A?BC?|A?B?C)

Это соответствует в ABCASDBC: ABC, A, BC. Моя настоящая проблема может иметь больше слов, и это выражение может расти и иметь дорогостоящие затраты на вычисление. Это моя самая большая проблема (приветствуется и другое решение без использования регулярных выражений)

1 ответ

Решение
(?=[xyz])x?y?z?

Или, если x, y, z не являются символами:

(?=x|y|z)(?:x)?(?:y)?(?:z)?

Идея состоит в том, чтобы сначала сопоставить существование любого из трех, используя положительный прогноз, а затем последовательность для самого заказа.

Другие вопросы по тегам