ONE字符串上的多个子字符串替换(从API提供的推文)

时间:2016-06-13 15:44:28

标签: php string twitter replace

我在PHP应用程序中处理一堆推文。 使用正则表达式替换带有链接的主题标签很简单,但对于大多数建议的Twitter主题标签的正则表达式,这些正则表达式简直太简单了。试图包含非ASCII字母,检查URL等,我意识到Twitter API返回"实体"所有这些已经为你处理了。

以下示例是带有主题标签#something#else的推文的代码段,其中包含字符串位置(索引)。

["entities"]=>
  object(stdClass)#89 (4) {
    ["hashtags"]=>
    array(2) {
      [0]=>
      object(stdClass)#90 (2) {
        ["text"]=>
        string(12) "something"
        ["indices"]=>
        array(2) {
          [0]=>
          int(110)
          [1]=>
          int(123)
        }
      }
      [1]=>
      object(stdClass)#91 (2) {
        ["text"]=>
        string(7) "else"
        ["indices"]=>
        array(2) {
          [0]=>
          int(126)
          [1]=>
          int(134)
        }
      }
    }

我只是想不出一个好的有效的解决方案来使用这些数据来替换源字符串上的主题标签。它有可能吗?

当然我知道substr_replace,但在第一次替换后,字符串位置将不再匹配下一次替换。

每次更换后都可以计算新的职位,但是当我以为我会问你的意见时。

1 个答案:

答案 0 :(得分:0)

我能想到的2个选项:

1。)使用偏移来修复差异: (口头代码)

$offset = 0;
while (hashtagToReplace){
   substr_replace($hashtagPosition + $offset, $htmlOfHashtag)
   $offset -= $length_of_replaced_word;
   $offset += $length_of_inserted_html;
}

2。)或更简单的方法:向后替换,以便更改“稍后”单词不会影响原始文本中前面单词的位置。 (n to 0而非0 to n)(首先在第126位插入1000个字符,不会更改110的位置)