REGEX全部匹配并将字符串替换为其他字符串

问题描述 投票:0回答:1

我正在使用REGEX来匹配所有模式并将每个匹配值替换为另一个字符串。

我的内容中包含此类代码

[amazon template=AmazonPreisNormal&asin=B00EJKWCJ4]
[amazon template=amazon_nur_eur&asin=B00EJKWCJ4]

我想做的是如下所述用另一个字符串替换template =值

对于AmazonPreisNormal,我想用widget-pricenormal替换,所以对于所有其他人

在preg_match_all之后,我得到了如下数组:

Array
 (
   [0] => Array
    (
        [0] => template=AmazonPreisNormal&
        [1] => template=amazon_nur_eur&
        [2] => template=AmazonLink&
        [3] => template=preisbeiamazon12&
        [4] => template=preis10&
        [5] => template=beiamazon11&
        [6] => template=beiamazon&
        [7] => template=xx_bei_amazon&
        [8] => template=beiamazon11br&
        [9] => template=beiamazon12&
        [10] => template=Image&
        [11] => template=preisbeiamazon12&
    )

[1] => Array
    (
        [0] => AmazonPreisNormal
        [1] => amazon_nur_eur
        [2] => AmazonLink
        [3] => preisbeiamazon12
        [4] => preis10
        [5] => beiamazon11
        [6] => beiamazon
        [7] => xx_bei_amazon
        [8] => beiamazon11br
        [9] => beiamazon12
        [10] => Image
        [11] => preisbeiamazon12
    )

  )

现在,我想要获取每个匹配的模板值,并将其替换为另一个值,例如对于AmazonPreisNormal,我想用widget-pricenormal广告替换它,以此类推,以所有其他具有不同字符串的值。

我正在尝试类似的操作,但从未得到输出

    $numberOfMatches = count($matches[0]);

    for ($i = 0 $i < $numberOfMatches; $i++;) { 
       $templaname =  $matches[0][$i];
    }

    if($templaname = 'beiamazon11') {
      $replacementTemplate = 'template="widget-beiamazon11"';
    }elseif($templaname = 'AmazonPreisNormal')  {
      $replacementTemplate = 'template="widget-pricenormal"';
    }elseif($templaname = 'amazon_nur_eur')  {
       $replacementTemplate = 'template="widget-nureur"';
    }elseif($templaname = 'AmazonLink')  {
       $replacementTemplate = 'template="widget-amazonlink"';
    }elseif($templaname = 'preisbeiamazon12')  {
       $replacementTemplate = 'template="widget-preisebeiamazon12"';
    }elseif($templaname = 'preis10')  {
       $replacementTemplate = 'template="widget-preis10"';
    }

将对此给予任何帮助

php regex search preg-replace
1个回答
0
投票

[这个问题可能更简单地使用2参数形式的strtr解决(带有替换数组):

strtr

输出:

$str = '[amazon template=AmazonPreisNormal&amp;asin=B00EJKWCJ4]
[amazon template=amazon_nur_eur&amp;asin=B00EJKWCJ4]';

$templates = array(
    'template=beiamazon11' => 'template="widget-beiamazon11"',
    'template=AmazonPreisNormal' => 'template="widget-pricenormal"',
    'template=amazon_nur_eur' => 'template="widget-nureur"',
    'template=AmazonLink' => 'template="widget-amazonlink"',
    'template=preisbeiamazon12' => 'template="widget-preisebeiamazon12"',
    'template=preis10' => 'template="widget-preis10"'
);

echo strtr($str, $templates);

[amazon template="widget-pricenormal"&amp;asin=B00EJKWCJ4] [amazon template="widget-nureur"&amp;asin=B00EJKWCJ4]

© www.soinside.com 2019 - 2024. All rights reserved.