Name:'lofse erbbnwq qweqw-qweqw' KKK
Name:'lofsdsse erbsdsdbnwq sds sdsd sdqwsdseqw-qwsdseqw' KKK
Name:'lofsse esdsdbnwq sds sds sddseqw-qwseqw' KKK
i read somewhere that it will work like this, but i tried and its not working :(
$data = preg_replace_callback('%Name:\'(.*)\' kkk%',replace_within_tag, $data);
function replace_within_tag($groups) {return preg_replace('/\s/', '.', $groups[0]);}
输出应该是这样的
Name:'lofse.erbbnwq.qweqw-qweqw' KKK
Name:'lofsdsse.erbsdsdbnwq.sds.sdsd.sdqwsdseqw-qwsdseqw' KKK
Name:'lofsse.esdsdbnwq.sds.sds.sddseqw-qwseqw' KKK
请为此我需要一些快速帮助,告诉我工作方式
答案 0 :(得分:1)
$array=array("Name:'lofse erbbnwq qweqw-qweqw' KKK", "Name:'lofsdsse erbsdsdbnwq sds sdsd sdqwsdseqw-qwsdseqw' KKK","Name:'lofsse esdsdbnwq sds sds sddseqw-qwseqw' KKK");
foreach ($array as $k=>$v){
if ( strpos($v,"Name:" ) !==FALSE) {
$s = explode("'",$v);
$s[1]=preg_replace("/\s+/",".",$s[1]);
$array[$k]=implode("'",$s);
}
}
print_r($array);
输出
$ php test.php
Array
(
[0] => Name:'lofse.erbbnwq.qweqw-qweqw' KKK
[1] => Name:'lofsdsse.erbsdsdbnwq.sds.sdsd.sdqwsdseqw-qwsdseqw' KKK
[2] => Name:'lofsse.esdsdbnwq.sds.sds.sddseqw-qwseqw' KKK
)
答案 1 :(得分:0)
对匹配进行分组,然后在回调中使用$matches[1]
,仅替换引号之间文本部分中的空格。你有几种方法可以做到这一点。例如:
$output = preg_replace_callback("!(Name:')(.*?)(' KKK)!", 'replace_spaces', $input);
function replace_spaces($matches) {
return $matches[1] . preg_replace('!\s+!', '.', $matches[2]) . $matches[3];
}
您需要执行此操作,因为您正在捕获前导和尾随字符串。另一种方法是捕获更少。例如:
$output = preg_replace_callback("!(?<=').*?(?=')!", 'replace_spaces', $input);
function replace_spaces($matches) {
return preg_replace('!\s+!', '.', $matches[0]);
}