И / или оператор в регулярном выражении
Сейчас я программирую словарный алгоритм, который проверяет, правильно ли пользователь ввел слово. У меня следующая ситуация: правильное решение для слова будет "часть1, часть2". Пользователь должен иметь возможность ввести либо "part1" (ответ 1), "part2" (ответ 2), либо "part1, part2" (ответ 3). Теперь я пытаюсь сопоставить строку, заданную пользователем, со следующим, автоматически созданным выражением регулярного выражения:
^(part1|part2)$
Это только возвращает ответы 1 и 2 как правильные, в то время как ответ 3 будет неправильным. Теперь мне интересно, есть ли оператор, похожий на | что говорит "и / или" вместо "или... или". Может ли кто-нибудь помочь мне здесь?
5 ответов
Я предполагаю, что вы хотите динамически построить регулярное выражение, содержащее другие слова, кроме part1 и part2, и что вы хотите, чтобы порядок не имел значения. Если это так, вы можете использовать что-то вроде этого:
((^|, )(part1|part2|part3))+$
Положительные совпадения:
part1
part2, part1
part1, part2, part3
Отрицательные совпадения:
part1, //with and without trailing spaces.
part3, part2,
otherpart1
Не эксперт по регулярным выражениям, но вы можете сделать ^((part1|part2)|(part1, part2))$
, На словах: "часть 1 или часть2 или оба"
Это работает без чередования?
^((part)1(, \22)?)?(part2)?$
или почему не это?
^((part)1(, (\22))?)?(\4)?$
Первый работает для всех условий, второй для всех, кроме part2
(используя GNU sed 4.1.5)
Использовать ,
если в vim:
:s/{\|}/"/g
заменит {и} на "так что {lol} станет"lol"