Регулярное выражение PHP необходимо для замены разрывов строк, но только между кавычками - PullRequest
0 голосов
/ 22 февраля 2010

наш клиент предоставил нам данные XML, которые необходимо обработать с помощью PHP. Они решили злоупотреблять атрибутами, используя их для больших кусков текста (содержащих разрывы строк). Синтаксический анализатор XML заменяет разрывы строк пробелами, чтобы сделать XML W3-совместимым.

Чтобы мы не потеряли разрывы строк, я хочу прочитать в файле строку, а затем перевести все разрывы строк между двойными кавычками с помощью 
. Я думаю, мне нужно регулярное выражение для этого, но у меня возникают проблемы с его созданием.

На данный момент это мой тестовый код (PHP 5), использующий упреждающий просмотр и просмотр, но он не работает:

$xml = '<tag attribute="Header\r\rFirst paragraph.">\r</tag>';
$pattern = '/(?<=")([^"]+?)\r([^"]+?)(?=")/';

print_r( preg_replace($pattern, "$1&#13;$2", $xml) );

Может кто-нибудь помочь мне понять это правильно? Должно быть легко для опытного мастера регулярных выражений:)

Ответы [ 2 ]

1 голос
/ 22 февраля 2010

Именно так я и закончил. Для дальнейшего использования я опубликую рабочий код здесь:

<?php
    header("Content-Type: text/plain");

    $xml = '<tag attribute="Header\r\rFirst paragraph.">\r</tag>';

    // split the contents at the quotes
    $array = preg_split('/["]+/', $xml);

    // replace new lines in each of the odd strings parts
    for($i=1;$i<count($array);$i+=2){
        $array[$i] = str_replace('\n\r','&#13;',$array[$i]);
        $array[$i] = str_replace('\r\n','&#13;',$array[$i]);
        $array[$i] = str_replace('\r','&#13;',$array[$i]);
        $array[$i] = str_replace('\n','&#13;',$array[$i]);
    }

    // reconstruct the original string
    $xml = implode('"', $array);

    print_r( $xml );
?>

Спасибо за ответ и поддержку этого решения:)

1 голос
/ 22 февраля 2010

Лучшим методом будет поиск за символом вместо этого. Установите логическое значение true, если вы встретите кавычку, а затем false, если найдете соответствующую кавычку.

Если вы обнаружите символ новой строки, если вы находитесь внутри кавычек (т. Е. Ваша переменная - true), тогда «переведите с &#13;» все, что вы подразумеваете под этим. В противном случае оставьте это в покое.

...