例如,我有一个像这样的文件
MistaFuzzy:
group: VIP
permissions: null
Spooner425:
group: VIP
permissions: null
我需要能够搜索名称,并暂时操纵该行,只需将VIP更改为VIP2。
我认为我需要使用substr_replace但是如何实现这一点却是一种损失。
答案 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