Когда вы строите чередование (например, (A|B|AB|O)
), вы должны быть осторожны с упорядочением элементов. Многие движки регулярных выражений будут останавливаться на первом подходящем заместителе (а не на самом длинном). Если бы не [-+]
форсирование возврата, (A|B|AB|O)[-+]
не сработало бы для "AB+"
. Вероятно, лучше сказать (AB|A|B|O)[-+]
(но вы должны проверить документы для вашего движка регулярных выражений).
Кроме того, если вы не намерены захватывать антиген для последующего использования, вам следует использовать скобки без захвата для группировки: (?:AB|A|B|O)[-+]
.
Кроме того, если вы хотите убедиться, что единственной вещью в строке является группа крови, вам нужны якоря, чтобы она не соответствовала только части строки: ^(?:AB|A|B|O)[-+]$
. Краткое примечание по якорям. В зависимости от вашего механизма регулярных выражений, ^
может соответствовать началу строки, а не началу строки, если вы передадите ей параметр многострочного совпадения. Аналогичным образом, $
может соответствовать концу строки, а не концу строки. По этой причине обычно используются три других якоря (но не% 100): \A
, \Z
и \z
. Если ваш движок регулярных выражений поддерживает их, \A
всегда соответствует началу строки, \Z
соответствует концу строки или символу новой строки непосредственно перед концом строки, а \z
соответствует только отправке строки.