2016-11-17 6 views
1

Я пытаюсь запустить серию шаблонов в файле 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' => "&#8239;" 
      ); 
     $patterns[2] = array(
      'find' => "/[«‹]\K(?!\p{Zs})/imu", 
      'repl' => "&#8239;" 
      ); 

Patter 1 должен соответствовать транс-блок 1 выше, и рисунок 2 должен соответствовать транс-блок 2. Схема 1 работает нормально, но если я запускаю шаблон 2 (только или оба), цикл никогда не заканчивается. Замена в основном заменяет нормальное (разрывное) пространство после «или <(шаблон 1) узким слоем или вставляет его, если нет места вообще (рисунок 1).

Я бы сказал, что проблема связана со вторым регулярным выражением, но я не могу понять, что не так с этим выражением. Какие-нибудь советы?

+0

иногда люди добавить выборочные данные на свои вопросы .... – Andreas

+0

К сожалению, я думаю did't это было бы актуально. Добавлено сейчас, спасибо! – msoutopico

+0

Ничего общего с вопросом, но на французском написано 'saucisse' – Toto

ответ

1

\p{Zs} шаблон не соответствует &#8239;, поэтому добавить &#8239; условию опережения во второй схеме:

'find' => "/[«‹]\K(?!\p{Zs}|&#8239;)/iu",) 
          ^^^^^^^   
+0

Точно, как я опубликовал в комментариях 17 ноября. Thans, Wiktor :) – msoutopico

 Смежные вопросы

  • Нет связанных вопросов^_^