将string中的多个url替换为不同的值

时间:2017-06-21 13:30:05

标签: php string

我有一个包含多个href属性的文本字符串。我想用不同的链接替换它们。

我已经“爆炸”原始链接数组和链接数组以及我要替换的网址。但我面临问题,我不知道如何用新值更新字符串。

所以,以一种简单的方式

PROC SQL;
SELECT 
 SUBSTR(STRIP(VALUENAME),1,-4) as valuename,
 columnname
FROM GETUOM
WHERE VALUENAME IS NOT NULL;
QUIT;

并有字符串

$sting1 = 'bla bla bla <a href="some_url">some text</a> bla bla bla <a href="some_url2">some text 2</a> bla bla bla <a href="some_url3">some text 3 3</a>';

我知道我可以“爆炸”这个href并替换它们,但是如何为$ sting1更新文本?

2 个答案:

答案 0 :(得分:1)

您可以使用两种方法。一个是使用str_replace,它只需要一个子串数组(或只是单个子串)来替换它们和一个数组(或单个字符串)来替换它们。

另一种方法类似,使用preg_replace,类似于str_replace,但它使用正则表达式

答案 1 :(得分:0)

我认为最好的解决方案是使用正则表达式

<?php
$regex        = '/href="([^"]*)"/si';
$ori_string   = 'yourStringWithSomeHrefs';
$replacements = [
    'http://foo.bar',
    'relativeLink',
    // and so on
];

if(preg_match_all($regex, $ori_string, $m, PREG_OFFSET_CAPTURE)) {
    foreach($m[1] as $key => $value) {
        $ori_string = substr_replace($ori_string, $replacements[$key], $value[1], str_len($value[0]));
    }
}

注意两件事

  1. 此代码尚未经过测试
  2. 此正则表达式仅对双引号href有用。如果您需要获得单引号和双引号,则需要使用更复杂的正则表达式