Pattern (2|4|First|Fourth)
будет соответствовать 2
или 4
или First
или Fourth
, вы правы, ^
соответствует началу строки (так называемый якорь), но то, что вы не знаетеявляется ?
оператором, что означает ** соответствует нулю или одному вхождению шаблона , so, since it's applied to whole
(2 | 4 | First | Fourth) `, он будет соответствовать каждой строке.
Вы можете подумать об этомas: соответствовать моему шаблону, привязанному в начале строки hte, но соответствовать ему ноль или один раз, так, также соответствовать только началу строки .
См. Demo , что каждая строка соответствует (она соответствует началу строки).
Просто удалите оператор ?
или замените его на $
, который соответствует концу строки (если это желательно).
Чтобы разрешить также пустую строку, используйте ^(2|4|First|Fourth|)$
- она будет привязывать конец строки с помощью $
(как упомянуто выше), также добавлена еще одна возможность в вашем чередовании, которая позволит сопоставлять empt string.
Еще одна демка