Я пытаюсь запустить серию шаблонов в файле XLIFF. Образец:Бесконечный цикл do-while с регулярным выражением
<trans-unit id="1">
<source> I like "sausages". </source>
<target> J'aime bien les « sausices » </target>
</trans-unit>
<trans-unit id="2">
<source> I like "sausages". </source>
<target> J'aime bien les «sausices» </target>
</trans-unit>
Я разбираю файл, а затем запускаю каждый шаблон для каждого целевого элемента.
foreach($patterns as $p) {
if (preg_match($p['find'], $tu[0]->target, $dummy)) {
do {
$targetText = $tu[0]->target;
$tu[0]->target = preg_replace($p['find'], $p['repl'], $targetText, -1, $count);
} while ($count);
}
}
Например, у меня есть массив с скороговорки:
$patterns[1] = array(
'find' => "/[«‹]\K(?!\x{00A0})\s/imu",
'repl' => " "
);
$patterns[2] = array(
'find' => "/[«‹]\K(?!\p{Zs})/imu",
'repl' => " "
);
Patter 1 должен соответствовать транс-блок 1 выше, и рисунок 2 должен соответствовать транс-блок 2. Схема 1 работает нормально, но если я запускаю шаблон 2 (только или оба), цикл никогда не заканчивается. Замена в основном заменяет нормальное (разрывное) пространство после «или <(шаблон 1) узким слоем или вставляет его, если нет места вообще (рисунок 1).
Я бы сказал, что проблема связана со вторым регулярным выражением, но я не могу понять, что не так с этим выражением. Какие-нибудь советы?
иногда люди добавить выборочные данные на свои вопросы .... – Andreas
К сожалению, я думаю did't это было бы актуально. Добавлено сейчас, спасибо! – msoutopico
Ничего общего с вопросом, но на французском написано 'saucisse' – Toto