(PHP) - изменение двух подстрок внутри строки - PullRequest
0 голосов
/ 12 января 2011

Это моя БОЛЬШАЯ строка

НАЧАТЬ: VEVENT
UID: хххххх
DTSTAMP: хххххх
СТАТУС: Подтверждена
КЛАСС: PUBLIC
URL: хххххх
РЕЗЮМЕ: YYYYYYY
ОПИСАНИЕ: XXXXXX; YYYYYYY ;
DTSTART: хххххх
DTEND: хххххх
GEO: хххххх
РАСПОЛОЖЕНИЕ: хххххх
END: VEVENT

Мне нужно изменить положение двух « ГГГГГГ » в РЕЗЮМЕ / ОПИСАНИЕ

Я должен заменить их, не будучи конкретным, поскольку он реализован в гораздо более крупной функции. (Эта строка уже вырезана из строки 3700 - Календарь)

Ответы [ 3 ]

0 голосов
/ 12 января 2011

это зависит от того, что вы подразумеваете под «быть конкретным». Если вам нужно заменить значения в определенных ключах (например, вы знаете, что хотите заменить значения для ключей «РЕЗЮМЕ» и «ОПИСАНИЕ»), то это просто вопрос использования регулярного выражения или преобразования строки в массив и замена значений, что-то вроде этого:

 //assuming $str is your string
$lines = explode("\n", $str);
foreach($lines as $k => $line)
{
   $parts = explode(":", $line);
   if ($parts[0] == 'SUMMARY') $lines[$k] = $parts[0].':'.'REPLACE_VALUE_FOR_SUMMARY';
   else if ($parts[0] == 'DESCRIPTION') $lines[$k] = $parts[0].':'.'REPLACE_VALUE_FOR_DESC';
}
$str = implode("\n", $lines);

версия регулярного выражения должна выглядеть примерно так:

$str = preg_replace('/(SUMMARY:)(.+)/', '$1:NEWVALUE', $str);
$str = preg_replace('/(DESCRIPTION:)(.+)/', '$1:NEWVALUE', $str);
0 голосов
/ 12 января 2011

найдите положение "SUMMARY:" и "DESCRIPTION:" и замените на позицию.

ИЛИ

найдите строку между этими позициями и замените эту строку

0 голосов
/ 12 января 2011

Я бы использовал regex replace с методом замены.

У rexex должны быть подвыборы для 2 строк, и затем вы можете построить сегмент методом замены и заменить его часть.

/SUMMARY:(.+?).*?DESCRIPTION:.*?; (.+);

http://www.php.net/manual/en/function.preg-replace-callback.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...