Php str_replace仅替换特定事件?
我有以下SQL命令:Php str_replace仅替换特定事件?,php,mysql,regex,str-replace,Php,Mysql,Regex,Str Replace,我有以下SQL命令: $sql = "INSERT INTO foo (value, value2, value3) VALUES (value1, value2, value3)"; 我想将第一个)替换为,自定义值), 类似地,第二个)和,1234567890) 结果应该是: $sql = "INSERT INTO foo (value, value2, value3, custom_value) VALUES (value1, value2, value
$sql = "INSERT INTO foo (value, value2, value3)
VALUES (value1, value2, value3)";
我想将第一个)
替换为,自定义值)
,
类似地,第二个)
和,1234567890)
结果应该是:
$sql = "INSERT INTO foo (value, value2, value3, custom_value)
VALUES (value1, value2, value3, 1234567890)";
我尝试使用str\u replace()
替换所有出现的内容
是否有只替换特定事件的选项 如果你有php>5.0,你可以在
stru-replace
中使用count
来设置你需要的替换数量。如果你有php>5.0,你可以在stru-replace
中使用count
来设置你需要的替换数量。如果只使用stru-replace,那么stru-replace将第一次替换为限制,然后再次替换为限制第二个
如果仅使用str_替换,则第一个str_替换为限制,第二个str_替换为限制 尝试以下操作:
$sql = str_replace('value3', 'value3, %s', $sql);
$sql = sprintf($sql, 'custom_value', '1234567890');
在我的本地设置上测试:
$sql = '(value, value2, value3) (value1, value2, value3)';
$sql = str_replace('value3', 'value3, %s', $sql);
$sql = sprintf($sql, 'custom_value', '1234567890');
// produces (value, value2, value3, custom_value) (value1, value2, value3, 1234567890)
echo $sql;
这是一个可重用的函数:
function replace_occurence($search, $replace, $subject) {
$subject = str_replace($search, '%s', $subject);
array_unshift($replace, $subject);
return call_user_func_array('sprintf', $replace);
}
$sql = '(value, value2, value3) (value1, value2, value3)';
$sql = replace_occurence(')', array(', custom_value)', ', 123456790)'), $sql);
请尝试以下操作:
$sql = str_replace('value3', 'value3, %s', $sql);
$sql = sprintf($sql, 'custom_value', '1234567890');
在我的本地设置上测试:
$sql = '(value, value2, value3) (value1, value2, value3)';
$sql = str_replace('value3', 'value3, %s', $sql);
$sql = sprintf($sql, 'custom_value', '1234567890');
// produces (value, value2, value3, custom_value) (value1, value2, value3, 1234567890)
echo $sql;
这是一个可重用的函数:
function replace_occurence($search, $replace, $subject) {
$subject = str_replace($search, '%s', $subject);
array_unshift($replace, $subject);
return call_user_func_array('sprintf', $replace);
}
$sql = '(value, value2, value3) (value1, value2, value3)';
$sql = replace_occurence(')', array(', custom_value)', ', 123456790)'), $sql);
你举的例子。。您可以使用此正则表达式:
#(\).+?\(.+)(\))#
在PHP代码中,它如下所示:
$sql = preg_replace("#(\).+?\(.+)(\))#",
", custom_value\1, 1234567890\2",
$sql, -1, $count);
它将搜索紧跟着开括号的闭括号,然后再查找最新的闭括号
例如:
对于您给出的示例。。您可以使用此正则表达式:
#(\).+?\(.+)(\))#
在PHP代码中,它如下所示:
$sql = preg_replace("#(\).+?\(.+)(\))#",
", custom_value\1, 1234567890\2",
$sql, -1, $count);
它将搜索紧跟着开括号的闭括号,然后再查找最新的闭括号
例如:
在PHP的基本函数集中没有这样的东西。但是您可以使用 结果:
foo (bar, baz, blub, custom_value) bar (boo, far, faz, 123456)
重写为可重用函数:
function str_replace_occurance($search, $replace, $subject, $occurance) {
$pos = NULL;
for ($i = 1; $i <= $occurance; $i++) {
$pos = strpos($subject, $search, ($pos===NULL) ? 0 : $pos+1);
}
return substr_replace($subject, $replace, $pos, strlen($search));
}
$sql = str_replace_occurance(')', ', custom_value)', $sql, 1);
$sql = str_replace_occurance(')', ', 1234567890)', $sql, 2);
echo $sql, PHP_EOL;
函数str\u replace\u occurance($search,$replace,$subject,$occurance){
$pos=NULL;
对于($i=1;$i来说,PHP的基本函数集中没有这样的东西,但是您可以使用
结果:
foo (bar, baz, blub, custom_value) bar (boo, far, faz, 123456)
重写为可重用函数:
function str_replace_occurance($search, $replace, $subject, $occurance) {
$pos = NULL;
for ($i = 1; $i <= $occurance; $i++) {
$pos = strpos($subject, $search, ($pos===NULL) ? 0 : $pos+1);
}
return substr_replace($subject, $replace, $pos, strlen($search));
}
$sql = str_replace_occurance(')', ', custom_value)', $sql, 1);
$sql = str_replace_occurance(')', ', 1234567890)', $sql, 2);
echo $sql, PHP_EOL;
函数str\u replace\u occurance($search,$replace,$subject,$occurance){
$pos=NULL;
对于($i=1;$i@Kaii)来说,我完全没有回答这个问题:S,将很快删除这个。Thanks@Kaii我在本地进行了测试,它可以生成(value,value2,value3,custom_value)(value1,value2,value3,1234567890)
,所以不太确定“sprintf()会自动失败”是什么意思,你测试过我的代码了吗,还是我遗漏了什么?@andrey你的回答在这一点上是正确的,我的回答太快了。但我最初说的话仍然有效:这只是一个例子,而且value3
不太可能是生产代码中value3
字段的值。OP请求替换括号和t这才是您真正应该做的。只对特定示例有效的代码一点帮助都没有。@kai完全没有回答问题:S,将很快删除它。Thanks@Kaii我在本地进行了测试,它可以产生(value,value2,value3,custom_value)(value1,value2,value3,1234567890)
,所以不太清楚您的意思“sprintf()将自动失败",你测试过我的代码了吗,还是我遗漏了什么?@andrey你的回答在这一点上是正确的,我的回答太快了。但我最初说的话仍然有效:这只是一个例子,而且value3
不太可能是生产代码中value3
字段的值。OP请求替换括号和t这才是您真正应该做的。只对特定示例有效的代码根本没有帮助。只对特定示例有效。实际的SQL代码如下所示:插入foo(value,value2,value3)值(value1,value2,value3)
,正则表达式无法正确替换它。您建议的问题的简单修复。现在代码应该只适用于特定示例。实际的SQL代码如下所示:插入foo(value,value2,value3)值(value1,value2,value3)
,正则表达式无法正确替换。请简单修复您建议的问题。.现在代码应该可以工作了。str\u replace()
没有限制参数。str\u replace()也没有限制参数。str\u replace()没有限制参数
。此外,如果存在,第二个调用仍将替换第一个调用。count
参数实际上是一个变量引用,其中str\u replace()
将返回替换发生次数的计数。它不是限制或偏移参数。count
参数实际上是一个变量引用,str\u replace()
将返回替换发生次数的计数。它不是限制或偏移参数。