试图在php中替换/编辑AFTER搜索字符串

时间:2011-04-22 19:00:32

标签: php fopen str-replace

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

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

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

我认为我需要使用substr_replace但是如何实现这一点却是一种损失。

3 个答案:

答案 0 :(得分:2)

我建议学习正则表达式

这是一个函数,如果文件格式为

,则允许您更改任何值
$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/

答案 1 :(得分:1)

为什么不使用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

答案 2 :(得分:0)

您可以使用正则表达式:

$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