Регулярное выражение для сопоставления отсортированных слов и хотя бы одного
Я хотел бы знать, существует ли более простой способ сопоставления для последовательности слов, где хотя бы одно является обязательным.
Чтобы упростить ситуацию, представьте, что мои слова - это 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)?
Идея состоит в том, чтобы сначала сопоставить существование любого из трех, используя положительный прогноз, а затем последовательность для самого заказа.