Это:
the( cat( sat( on( the( mat)?)?)?)?)?
ответит на ваш вопрос. Удалить "необязательную группу" паренов "(...)?" для частей, которые не являются необязательными, добавьте дополнительные группы для элементов, которые должны совпадать.
the // complete match
the cat // complete match
the cat sat // complete match
the cat sat on // complete match
the cat sat on the // complete match
the cat sat on the mat // complete match
the dog sat on the mat // two partial matches ("the")
Возможно, вы захотите добавить некоторые предварительные условия, такие как начало строки, чтобы предотвратить совпадение выражения со вторым «the» в последней строке:
^the( cat( sat( on( the( mat)?)?)?)?)?
РЕДАКТИРОВАТЬ: Если вы добавите постусловие, такое как привязка конца строки, сопоставление будет полностью предотвращено в последнем примере, то есть последний пример не будет соответствовать вообще :
the( cat( sat( on( the( mat)?)?)?)?)?$
Кредиты за чаевые идут на VonC . Спасибо!
Пост-условие может, конечно, быть чем-то еще, что вы ожидаете после матча.
Кроме того, вы можете удалить последний знак вопроса:
the( cat( sat( on( the( mat)?)?)?)?)
Имейте в виду, что: из-за этого одно "the" не будет совпадать, поэтому первая строка также не будет совпадать.