Возможно, это излишне, но я думаю, что если вы замените эту часть вашего регулярного выражения:
(1st|2nd|3rd|4th|5th)
примерно так:
(([1-9]?([2-90](((1st)|(2nd)|(3rd)|([4-90]th))|(1[0-9]th))))|((1st)|(2nd)|(3rd)|([4-9]th)))
... вы можете достичьжелаемый образец соответствия.Моя идея заключалась в том, чтобы охватить любой порядковый номер от 1-го до 999-го.
Обратите внимание, что я не проверял это регулярное выражение , поэтому, возможно, ему понадобятся некоторые исправления.
Также рассмотрим ответ @Wictor: если вы ищете эти шаблоны по нескольким строкам, а не по одной многострочной (другими словами, все проверяемые вами строки будут такими же, как в примере, без каких-либодругой символ до и после), перенос вашего регулярного выражения между ^
и $
поможет сделать его более точным.
И, как сказал @Wictor в своем ответе, если некоторый подшаблон принимает пустую строку какматч, он может вести себя неожиданно.Исчерпывающие методы проб и ошибок могут помочь найти недостатки такого рода, чтобы исправить их.