(PHP) - 更改字符串中的两个子字符串

时间:2011-01-12 13:42:07

标签: php string substring

这是我的BIG字符串

  

BEGIN:VEVENT
  UID:XXXXXX
  DTSTAMP:XXXXXX
  状态:Confirmed
  类:public
  网址:XXXXXX
  发明内容:的 YYYYYYY
  说明:XXXXXX;的 YYYYYYY ;
  DTSTART:XXXXXX
  DTEND:XXXXXX
  GEO:XXXXXX
  位置:XXXXXX
  END:VEVENT

我需要在摘要/描述中更改两个“ YYYYYYY ”的位置

我必须更换它们而不是特定的,因为它是在更大的功能中实现的。 (此字符串已从3700行中切成 - 日历)

3 个答案:

答案 0 :(得分:0)

我会使用替换方法使用正则表达式替换。

rexex应该有2个字符串的子选择,然后你可以在replace方法中构建段并替换它的大部分。

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

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

答案 1 :(得分:0)

这取决于“具体”的含义。如果您需要替换特定键中的值(例如,您知道要替换“SUMMARY”和“DESCRIPTION”键的值),那么只需使用正则表达式或将字符串转换为一个数组并替换值,如下所示:

 //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);

答案 2 :(得分:0)

找到“SUMMARY:”和“DESCRIPTION:”的位置 并替换为位置。

OR

找到这些位置之间的字符串并替换该字符串