Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php str_replace仅替换特定事件?_Php_Mysql_Regex_Str Replace - Fatal编程技术网

Php str_replace仅替换特定事件?

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命令:

$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()
将返回替换发生次数的计数。它不是限制或偏移参数。