Сами регулярные выражения выполняются слева направо.
Это означает, что если у вас есть список в группе чередований, то первое чередование
, которое соответствует, заставит двигатель пройти мимо группы чередований, а
продолжит попытки сопоставить оставшуюся частьрегулярное выражение
Если ваш список создает регулярное выражение, подобное этому \b(Antelope|Antelope Creek|Antelope Lake)\b
, вы можете видеть, что только Antelope
когда-либо будет предоставлена возможность дляматч.
Чтобы обойти это, вы должны отсортировать список в в порядке убывания до построения регулярного выражения
.
Выполнение этого приведет к следующему регулярному выражению:
\b(Antelope Lake|Antelope Creek|Antelope)\b
Поскольку самые длинные (отсортированные) подстроки находятся в начале, движок теперь имеет шанс совпасть с другимичередования.