试图替换/编辑行后搜索字符串在php


trying to replace/edit line AFTER search string in php

例如,我有一个像这样的文件

MistaFuzzy:
    group: VIP
    permissions: null
Spooner425:
    group: VIP
    permissions: null

我需要能够搜索名称,并操纵下面的行,暂时,只是将VIP更改为VIP2。

我想我需要使用substr_replace,但我是一个损失,如何实现这一点。

我推荐学习正则表达式

如果一个文件的格式是

,这里有一个函数允许你改变任何值
$str = <<<END
MistaFuzzy:
    group: VIP
    permissions: null
Spooner425:
    group: VIP
    permissions: null
END;
function updateFile( $username, $key, $value, $str ) {
    return preg_replace(
        sprintf( "~%s:(.*?)%s:.*?'n~sm", $username, $key ),
        sprintf( "%s:$1%s: %s'n", $username, $key, $value ),
        $str
    );
}
echo updateFile( 'Spooner425', 'permissions', '3', $str );

每天阅读这个网页,直到你理解它们!http://www.regular-expressions.info/

为什么不使用XML文件呢?

<?xml version="1.0" encoding="iso-8859-1"?>
<names>
**<name username="MistaFuzzy">**
 <group>VIP</group>
 <permissions>null</permissions>
**</name>**
**<name username="Spooner425">**
 <group>VIP</group>
 <permissions></permissions>
**</name>**
</names>

,然后你可以使用SimpleXML (PHP5)。看这个http://onlamp.com/pub/a/php/2004/01/15/simplexml.html

您可以使用正则表达式:

$user = preg_quote('Spooner425', '~');
$new_group = addcslashes('VIP2', '''$');
$string_input = file_get_contents('/path/to/your/file.txt');
$string_output = preg_replace('~(.+)(' . $user . ':'s+group:'s+)[^'s]+(.+)~s', '$1$2' . $new_group . '$3', $string);
echo '<pre>';
print_r($string_output);
echo '</pre>';

上面应该输出如下内容:

MistaFuzzy:
    group: VIP
    permissions: null
Spooner425:
    group: VIP2
    permissions: null