preg_replace_callback() 可以保留变量的元素吗?
Can preg_replace_callback() preserve elements of the variable?
我有一系列包含 URL 的大型 markdown 字符串,大多数 URL 都很好,但其中一些在更改格式时损坏了,它们有一些破折号(“-”)已更改进入空白字符。
我一直在尝试使用 preg_replace_callback() 在 PHP.
中加载它们时修复它们
示例:
[Site Name](http://www.siteurl.com/this-is-the-website broken url)
由于这些都包含在大字符串中(通常有 4-5 段文本)并且文本中可能有 1-3+ 个 URL,我需要遍历它们,捕获字符串,删除空格用破折号替换它,return它到正确的位置。
目前我已经完成了匹配:
$postBody = preg_replace_callback("^(\([A-Za-z\:\/0-9\-.\s]*\))^",'urlcallback', $postBody);
我尝试创建函数:
function urlcallback ($matches) {
static $id = 0;
$matches[$id] = preg_replace("^\s^", "-", $matches);
return $matches[$id];
$id++;
}
我对 preg_replace_callback() 的理解是,它会在每次遇到字符串中的匹配项时调用该函数,并将该函数的 return 放在那个位置,但是因为我我收到错误:
Notice: Array to string conversion in cleanup.php at line 139
第 139 行是我早期的 $postBody 声明,我假设 preg_replace_callback() 同时处理所有匹配项,所以我不确定如何将它们传回字符串而只更改每个空格中的空格?
问题似乎出在这一行:
$matches[$id] = preg_replace("^\s", "-", $matches);
因为 $matches
是数组而不是字符串值。
应该是:
$matches[$id] = preg_replace('/\s/', "-", $matches[0]);
$matches[0]
表示来自 preg_replace_callback
函数调用的整个匹配字符串。
我有一系列包含 URL 的大型 markdown 字符串,大多数 URL 都很好,但其中一些在更改格式时损坏了,它们有一些破折号(“-”)已更改进入空白字符。
我一直在尝试使用 preg_replace_callback() 在 PHP.
中加载它们时修复它们示例:
[Site Name](http://www.siteurl.com/this-is-the-website broken url)
由于这些都包含在大字符串中(通常有 4-5 段文本)并且文本中可能有 1-3+ 个 URL,我需要遍历它们,捕获字符串,删除空格用破折号替换它,return它到正确的位置。
目前我已经完成了匹配:
$postBody = preg_replace_callback("^(\([A-Za-z\:\/0-9\-.\s]*\))^",'urlcallback', $postBody);
我尝试创建函数:
function urlcallback ($matches) {
static $id = 0;
$matches[$id] = preg_replace("^\s^", "-", $matches);
return $matches[$id];
$id++;
}
我对 preg_replace_callback() 的理解是,它会在每次遇到字符串中的匹配项时调用该函数,并将该函数的 return 放在那个位置,但是因为我我收到错误:
Notice: Array to string conversion in cleanup.php at line 139
第 139 行是我早期的 $postBody 声明,我假设 preg_replace_callback() 同时处理所有匹配项,所以我不确定如何将它们传回字符串而只更改每个空格中的空格?
问题似乎出在这一行:
$matches[$id] = preg_replace("^\s", "-", $matches);
因为 $matches
是数组而不是字符串值。
应该是:
$matches[$id] = preg_replace('/\s/', "-", $matches[0]);
$matches[0]
表示来自 preg_replace_callback
函数调用的整个匹配字符串。