这是我的BIG字符串
BEGIN:VEVENT
UID:XXXXXX
DTSTAMP:XXXXXX
状态:Confirmed
类:public
网址:XXXXXX
发明内容:的 YYYYYYY
说明:XXXXXX;的 YYYYYYY ;
DTSTART:XXXXXX
DTEND:XXXXXX
GEO:XXXXXX
位置:XXXXXX
END:VEVENT
我需要在摘要/描述中更改两个“ YYYYYYY ”的位置
我必须更换它们而不是特定的,因为它是在更大的功能中实现的。 (此字符串已从3700行中切成 - 日历)
答案 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
找到这些位置之间的字符串并替换该字符串