Использование Lookahead для поиска последнего символа

Я хочу сопоставить слова, оканчивающиеся на "o", "s", "x", "ch" или "sh", но по какой-то причине он совпадает с любым словом, имеющим любую из этих букв.

Это мое регулярное выражение:

o|s|x|ch|sh(?=$)

Некоторые примеры:

  • омар // Не должно совпадать
  • персик // должен совпадать
  • эксперт // Не должно совпадать
  • Картофель // Должен совпадать

1 ответ

Решение

Вы должны сгруппировать чередование, иначе оно будет интерпретировано как:

o OR s OR x OR ch OR sh(?=$) // pseudo-code

Вы можете использовать группу без захвата, чтобы сгруппировать их вместе:

.*(?:o|s|x|ch|sh)(?=$)

И .* позволяет полное слово, чтобы соответствовать.

Regex101

Другие вопросы по тегам