搜索匹配项并保存,也许可以替换它


Search for matches and save and maybe replace it

我会尽力解释我的问题。。。可以

我有一个像这样的多行字符串:

Hello World
And again Hello <a:b:c>
And again ...

现在我想替换,但它取决于第一个字母和第二个字母,依此类推。

arr = ('a', 'b', 'c')

现在我有机会分析第一个论点。

switch (arr[0]) {
         case 'a':
              // do this
         [...]
}

如果第一个参数是a,我想用某物替换CCD_ 1。

现在的问题是:为了获得参数,我使用preg_split。现在怎么可能替换字符串的正确部分?我可以用PREG_SPLIT_OFFSET_CAPTURE得到位置,但它是一个多行字符串,(!)当我用某个东西替换时,其他匹配项的位置(可能有n个匹配项)也必须更改,对吧?

也许你有解决这个问题的办法?

我认为preg_replace可以工作,但我认为这是解决这个问题的错误函数,因为一个字母(例如第二个字母,b)可以是一个动态参数。也许我理解preg_replace函数的方式不对。。。但是我真的不知道怎么解决这个问题。也许你有一个文档,我可以读一些东西来解决这个问题(请不要把我链接到php.net——我已经读过了),或者你有个主意。

// This function will replace specific matches into a new form
function RewriteText($Match)
{
  $EntireSection = $Match[0];
  $GroupOne = $Match[1];
  // ...
  return $Value;
}
$NewText = preg_replace_callback('/Hello's+('S+)/i', "RewriteText", $Text);

如果我正确理解你的问题,你想替换字符串中的文本,但替换完全基于匹配中找到的第一个字符?

如果这是正确的,您可以使用PHP的preg_replace_callback()。类似于以下的东西应该起作用:

function replace_callback($matches) {
    switch ($matches[0]) {
        case 'a': return 'whatever';
    }
}
$str = preg_replace_callback('/<([a-z]):([a-z]):([a-z])>/ig', "replace_callback", $str);