Вы не указали поведение в отношении содержимого, отличного от «foo» и «bar», или повторений одного в отсутствие другого. например, " foo d" или " barbar ian" должны совпадать?
Предполагая, что вы хотите сопоставить строки, которые содержат только один экземпляр "foo" или "bar", но не оба и не несколько экземпляров одного и того же, без учета чего-либо еще в строке (т. Е. "Food" «совпадения и« варвар »не совпадает), то вы можете использовать регулярное выражение, которое возвращает количество найденных совпадений и считает его успешным только в случае обнаружения только одного совпадения». например, в Perl:
@matches = ($value =~ /(foo|bar)/g) # @matches now hold all foos or bars present
if (scalar @matches == 1) { # exactly one match found
...
}
Если разрешено многократное повторение одной и той же цели (т. Е. «Варварские» совпадения), то можно использовать этот же общий подход, а затем пройтись по списку совпадений, чтобы увидеть, все ли совпадения являются повторениями одного и того же текста или, если другая опция также присутствует.