Как оператор И/ИЛИ представлен в регулярных выражениях?

В настоящее время я программирую словарный алгоритм, который проверяет, правильно ли пользователь ввел слово. У меня следующая ситуация: правильное решение для слова будет "часть1, часть2". Пользователь должен иметь возможность ввести либо "part1" (ответ 1), "part2" (ответ 2), либо "part1, part2" (ответ 3). Теперь я пытаюсь сопоставить строку, заданную пользователем, со следующим, автоматически созданным выражением регулярного выражения:

^(part1|part2)$

Это только возвращает ответы 1 и 2 как правильные, в то время как ответ 3 будет неправильным. Мне вот интересно, есть ли оператор, похожий на | что говорит and/or вместо того, чтобы either...or.

Может ли кто-нибудь помочь мне решить эту проблему?

Ответ 1

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

((^|, )(part1|part2|part3))+$

Положительные совпадения:

part1
part2, part1
part1, part2, part3

Отрицательные совпадения:

part1,           //with and without trailing spaces.
part3, part2, 
otherpart1

Ответ 2

'^(part1|part2|part1,part2)$'

работает ли он?

Ответ 3

Работает ли это без чередования?

^((part)1(, \22)?)?(part2)?$

или почему не это?

^((part)1(, (\22))?)?(\4)?$

Первый работает для всех условий второй для всех, кроме part2 (используя GNU sed 4.1.5)

Ответ 4

Не специалист в regex, но вы можете сделать ^((part1|part2)|(part1, part2))$. В словах: "часть 1 или часть 2 или оба"

Ответ 5

Или вы можете использовать это:

^(?:part[12]|(part)1,\12)$