Начиная с начала строки темы, вы хотите сопоставить 2 n + 1 гласные, за которыми следует o
, но только если за o
следует ровно еще одна гласная:
$str = preg_replace(
'/^((?:(?:[^aeiou]*[aeiou]){2})*)' . # 2n vowels, n >= 0
'([^aeiou]*[aeiou][^aeiou]*)' . # odd-numbered vowel
'o' . # even-numbered vowel is o
'(?=[^aeiou]*[aeiou][^aeiou]*$)/', # exactly one more vowel
'$1$2ö',
'heaeafesebatoik');
Чтобы сделать то же самое, но для нечетного o
, сопоставьте 2 n ведущих гласных, а не 2 n + 1:
$str = preg_replace(
'/^((?:(?:[^aeiou]*[aeiou]){2})*)' . # 2n vowels, n >= 0
'([^aeiou]*)' . # followed by non-vowels
'o' . # odd-numbered vowel is o
'(?=[^aeiou]*[aeiou][^aeiou]*$)/', # exactly one more vowel
'$1$2ö',
'habatoik');
Если он не совпадает, то он не выполняет замену, поэтому безопасно запускать их последовательно, если это то, что вы пытаетесь сделать.